Python: 打包发布到PyPi及踩坑经历

article/2025/8/29 2:16:43

经常会碰到python包要打包成sdk放到PyPi上开源的情况。

说明:
在下面准备前,还需要在pypi网站上注册账户。否则无法上传到pypi网站上。
另外,我还准备了github的账户,当然什么公钥也生成了,在github上保存好,便于git操作,这里不表。

一、准备
1、setup.py文件,这个不详述,到处都有介绍。
setup.py文件是打包发布的关键性文件之一。具体可以参考:

https://docs.python.org/3.8/distutils/setupscript.html#installing-additional-files

里面内容详细,是权威的资料。

其中,我个人setup.py文件如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os 
from setuptools import setup, find_packagesMAJOR =1
MINOR =0
PATCH =0
VERSION = f"{MAJOR}.{MINOR}.{PATCH}"def get_install_requires():reqs = ['pandas>=0.18.0','requests>=2.0.0','toml>=0.10' ,'pyzstd >=0.15','numpy>=1.9.2']return reqs
setup(name = "dbpystream",version = VERSION,author ="songroom",author_email = "rustroom@163.com",long_description_content_type="text/markdown",url = 'https://github.com/songroom2016/dbpystream.git',long_description = open('README.md',encoding="utf-8").read(),python_requires=">=3.6",install_requires=get_install_requires(),packages = find_packages(),license = 'Apache',classifiers = ['License :: OSI Approved :: Apache Software License','Natural Language :: English','Operating System :: OS Independent','Programming Language :: Python',       'Programming Language :: Python :: 3.6','Topic :: Software Development :: Libraries :: Python Modules',],package_data={'': ['*.csv', '*.txt','.toml']}, #这个很重要include_package_data=True #也选上)

重点是,要对setup.py进行检查,以确认模块是否语法正确。

$ python3 setup.py check

如下:

D:\py_projects\dbpystream\> python  setup.py checkrunning check

表明setup.py语法检查通过。

需要提醒的是,如果你的包里,需要读出原目录中相关的.txt,csv,toml等格式文件,这个你要记得带上。否则,打包的时侯,不会为这个进行打包。会自动忽略,当你pip后,你就会发现报错,少了这个文件。

2、LICENSE,格式内容

通常用这个:

Copyright (c) 2018 The Python Packaging AuthorityPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

3、README.md
这个自己整一下即可以。这个是markdown格式

在这里插入图片描述5、.gitignore
整一个,这个不是必须的。是上传github上要得到的,清爽一点。

__pycache__/
*workspace
*.py[cod]
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
htmlcov/
.tox/
.nox/
.hypothesis/
.pytest_cache/
*.egg-info/
.vscode/
.*.swp
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
junit*.xml
*.cover
MANIFEST
.installed.cfg
*.egg
*.manifest
*.spec
*.log
*.con
*.out
env.sh
*-env.sh

在这里插入图片描述

二、打包、上传

说明,下面命令中python3,如果有python软链接到python3的,直接可以用python,不需要用python3.具体大家看情况。就不作特别说明了。

1、安装好打包 工具

python3 -m pip install --user --upgrade setuptools wheel

2、在指定的目录下,进行打包;打包后会生成两个文件

python3 setup.py sdist bdist_wheel

在这里插入图片描述会生成几个文件夹,build,dist,.egg-info等。

3、上 传pypi
(1)安装上传工具

python3 -m pip install --user --upgrade twine

(2)上传pypi
有些可以试一下:

 py- m twine upload dist/*

 twine upload dist/*

在这里插入图片描述

三、各种坑

1、pip升级问题

ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: 'c:\\python310\\lib\\site-packages\\pip-21.2.3.dist-info\\entry_points.txt'
Consider using the `--user` option or check the permissions.

报错信息中推荐使用 --user 命令,

C:\Python310\python.exe -m pip install --user  --upgrade pip

后面解决。

PS D:\dbpystream> pip -V      
pip 22.3.1 from C:\Users\****\AppData\Roaming\Python\Python310\site-packages\pip (python 3.10)

成功升级。

2、pip install 后找不到module问题

重点应放在,在没有上传pypi前,比如test.py是否正常(强烈建议test.py应放在\test文件夹下)。也就是说,如果在没有上传前,就存在找不到module的情况,上传后,虽然已经下载成功,但仍会报“找不到module”的错误。

建议:
(1)、先检查代码是否正常。在上传前,看看程序是不是正常,module是否正常,比如,

__init__.py #是否在文件夹中,起到module的作用。

(2)、先找样包练下手。从github上找一个实例,看看别人封装的代码,自已走一下,有什么问题。如果正常,再打包自己的库到pypi,这样可以少踩一些坑。

3、pip install后,找不到相应的捆绑资源文件(csv,txt,toml等)

这种情况是,pip install没问题,但是运行时会出现一些问题:
比如,

Exception: toml_file :C:\Users\aaaa\AppData\Roaming\Python\Python310\site-packages\dbpystream\method.toml 
does not exist!

强烈建议,不要在module中增加在指定的地址下读取相应与module捆绑的资源性文件(csv,txt,toml),因为打包后,module的地址已经被改变了,并不是原来的module显现结构,并不能按原来的目录下读取相应的文件。

经历的坑:原来在module中用method.toml文件配置了一些信息,便于函数读取。但是配置了各种参数后,仍不起作用,后面只能放弃。后改用method.py的方式,把相关的配置信息从toml格式,改成了dict格式。
替换后,这个仍在原来的目录下,这样比较方便。

4、不能上传问题

除密码和账户原因外,你需要注意:

这个在刚玩的时侯会碰到。你不能覆盖性上传一个文件,因为pypi不认相同的版本号的包重复上传。你只能把version版本号往上加。

比如,原来是0.1.0的,改成0.1.1,再次上传就OK了。

四、验证

pip install XXXX

除检查下载是否顺利外;同时,打开python IDE,看一下运行是否正常。

import XXXX

如果各正功能如预期,证明验证OK.

在这里插入图片描述


http://chatgpt.dhexx.cn/article/usVvfekL.shtml

相关文章

python3 安装 pip (PyPI)

1. 进入 pypi 的官网: https://pypi.org/project/pip/ 点击图中的 红色 的 2. 处的 pip-18.1.tar.gz 自动下载,也可以直接 点击下载 pip18.1 2.下载完成后,直接解压到当前文件夹 进入到当前路径的 命令行: 然后在输入 python setup.py install 就开始安装了 3. 安装完pip 后…

如何构建Python软件包并上传到Pypi

因为最近在做Python包,所以也了解了一下这个。这里我把我自己的学习经验写出来,如果哪里写的不好也请大家提出来。本文的内容大多数都来自 Packaging Python Projects - Pypi ,我根据我的理解进行描述一下。 演示配置 操作系统:W…

5分钟学会本地Pypi源搭建

前言 通常我们在下载 python 包时都会选择清华源或者阿里源。但是当我们的开发环境无法访问外网的时候,就需要搭建私有源。今天我们就一起花 5 分钟时间学习如何搭建一个本地私有源。 工具选择 搭建本地私有源有很多种方案,包含但不限于 pypiserver&…

Python!Python!

2019独角兽企业重金招聘Python工程师标准>>> 条件分支: if 条件: 条件为真 (所有缩进都会执行) else: 条件为假 While循环 while 条件: 条件为真(true)执行动作 for..in递归使用序列对象中的每个项目 and逻辑操作符 and逻辑操作符可以将任意表达式链接在一起&#x…

已解决Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was a problem confirming

已解决(pip升级报错) WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: pip in …

python--pip常用命令、国内PyPI镜像、使用pip安装第三方库

让我们来看看具体内容&#xff1a; 一. pip常用命令 列出已安装的包&#xff1a; pip freeze or pip list 导出requirements.txt&#xff1a; pip freeze ><目录>/requirements.txt 在线安装包&#xff08;模块库&#xff09;&#xff1a; pip install <包名>…

Python 库 PyPI 危机!

据 BleepingComputer 报道&#xff0c;Python 官方软件包存储库 PyPI 遭受了黑客攻击&#xff0c;攻击者通过注入大量垃圾邮件包的形式发起了洪水攻击&#xff0c;这些垃圾邮件及软件包通过采用电影&#xff0c;电视节目名称来命名&#xff0c;有些还包含了年份、在线、免费等字…

【Python包管理系列1】python打包发布到PyPI全过程(入门版)

文章目录 目的准备知识PyPIPyPAsetuptoolsbuildtwine 实战过程总结 目的 如果发布一个python包到pypi上&#xff0c;共他人使用&#xff0c;本文试图讲清楚。 准备知识 PyPI 官网地址&#xff1a;https://pypi.org/ 全称Python Package Index&#xff08;Python包索引&#…

PyPy

pypy 原理 pypy 原理为何 PyPy 是趋势&#xff1f;即时编译: PyPy和它的未来PyPy is Hard to Understand结尾总之&#xff1a; GIL&#xff0c;即全局解释器锁&#xff08;Global Interpreter Lock&#xff09;&#xff0c;是计算机程序设计语言解释器用于同步线程的工具&…

Linux系统安装DB2数据库详解

1、上传DB2安装文件 将 DB2 安装文件及 DB2 补丁文件上传到服务器上 打开终端对其进行解压 2、安装前注意事项 &#xff08;1&#xff09;要求服务器磁盘空间至少为1000M &#xff08;2&#xff09;安装之前不要创建 db2inst1、db2fenc 等用户 &#xff08;3&#xff09;db…

windows下db2创建数据库

windows下db2创建数据库 1.找到命令行dbcmd 打开电脑&#xff0c;进入电脑操作系统&#xff0c;使用快捷键组合WINR键可以直接打开运行&#xff0c;输入dbcmd命令行&#xff0c;即可直接打开db2命令行dbcmd。 2.使用db2start启动db2数据库 通过以上方法&#xff0c;在电脑…

db2数据库(db2数据库安装)

db2是什么&#xff0c;它和oracle有什么本质的区别&#xff1f; oracle和SQL SERVER都是用SQL语句可以编写数据库&#xff0c;但语法有区别&#xff0c;我楼上说的SQL SERVER说不稳定&#xff0c;也不一定吧&#xff5e;这里我说的都是正版&#xff0c;不过ORACLE确实是现在企业…

JDBC连接DB2数据库

前言 分享一个工作上遇到的问题&#xff0c;使用JDBC连接DB2数据库&#xff0c;我这里使用的是Gradle&#xff0c;我发现网上使用Gradle的太少了&#xff0c;大部分使用的是maven&#xff0c;不论使用哪一个&#xff0c;都建议下载jar包到本地&#xff0c;使用手动添加进项目里…

【windows版本】 db2数据库安装与使用

0.目录 1.安装DB2数据库1.创建数据库2. 配置链接参数3.工具链接4. 参考5.其他 说句真心话&#xff0c;真TMD讨厌IBM的软件&#xff0c;IBM的软件下载真是TMD不容易。要不是公司项目需求&#xff0c;谁TMD还喜欢用IBM的软件&#xff0c;真气人。 本文的目的&#xff1a; 1&#…

DB2数据库基本概念

http://db365.net/home.php?modspace&uid19鉴于CSDN无故删除博文&#xff0c;本博客不再更新&#xff0c;暂时迁至http://www.db365.net 1 DB2数据库基本概念 1.1数据库对象 关键的数据库对象包括&#xff1a;实例、数据库、节点组、表、视图、索引、模式、系统目录表。…

DBeaver连接db2数据库

DBeaver工具安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ruEF0dDkbYDy02-aYxuj8w 密码&#xff1a;l0t4 db2驱动包: 链接&#xff1a;https://pan.baidu.com/s/1OaSHGi7toIhKCk8fNEv-CQ 密码&#xff1a;tazm 安装好DBeaver工具后 1、新建连接 2、连接…

DB2数据库

DB2是IBM公司研制的一种关系型数据库系统&#xff0c;它主要应用于大型应用系统&#xff0c;具有很强的海量数据处理能力&#xff0c;具有较好的可伸缩性 教学地址 可支持从大型机到单用户环境&#xff0c;包括DB2工作组版&#xff08;DB2Workgroup Edition&#xff09;、DB2企…

socket绑定的ip为INADDR_ANY 的意义 htonl(INADDR_ANY)(0.0.0.0所有地址、不确定地址、任意地址)(htonl和htons区别)

INADDR_ANY 表示监听0.0.0.0地址&#xff0c;socket只绑定端口&#xff0c;不绑定本主机的某个特定ip&#xff0c;让路由表决定传到哪个ip&#xff08;0.0.0.0地址表示所有地址、不确定地址、任意地址&#xff09;&#xff08;一台主机中如果有多个网卡就有多个ip地址&#xff…

ntohs, ntohl, htons,htonl的比较和详解

假设在x86平台上,有一个int型变量,在内存中的内部由低到高分别是:0x12,0x34,0x56,0x78当通过网络发送该数据时,正确的发送顺序是 0x78,0x56,0x34,0x12 X86 系列 CPU都是 little&#xff0d;endian 的&#xff0c;所以int 型变量值为 0x78563412, 网络发送数据时&#xff0c;采…

c语言中htonl函数,htonl()函数学习

今天在网上看到一篇关于htonl()函数的解释,感觉有道理,贴过来大家一起学习! htonl就是把本机字节顺序转化为网络字节顺序 h---host 本地主机 to 就是to 了 n ---net 网络的意思 l 是 unsigned long 所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低&#x…