python 公用的包可以使用 pip 管理工具方便地下载、使用、管理,那么如何将自己的工具包上传到 pip 服务器供别人下载呢,本记录相关内容。
简介 {#简介}
python 包可以使用 pip 工具方便地管理,分享和使用。
- 使用python包模块有很多好处:
- 可以使用
pip
之类的命令来管理和安装python模块,避免手动管理引用文件。 - 方便共享我们的python包。
- 在一个模块中可以添加文档。
- 在python包与包之间有很多的相互依赖,引入包模块可以预先加载所有需要的包,避免由于模块之间依赖造成的问题。
- 核心的源服务器
The Python Package Index (PyPI)
为 https://pypi.org/
pip 源初始的形态,我们希望把自己的包也上传到这里。
创建自己的 python 包 {#创建自己的-python-包}
先置条件 {#先置条件}
要把自己的包发布到pip上,需要满足以下几个条件:
- 目录下的所有文件名均为英文小写
- 不包含下划线,空格和特殊字符(支持中划线,但也不建议使用)
- 选定的包名在 pypi 网站上没有使用过,可以访问官网,搜索一下想用的名字有没有被占用。
包结构 {#包结构}
我们的包名称为 utils-vvd
(示例)
-
需要在包最外层目录创建
setup.py
文件,用于打包和发布 -
setup.py 文件内容
-
其中
packages
-
参数说明
| 参数 | 说明 | |----------------------|------------------------------------------------------------------------------| | version | 包发布版本 | | description | 描述信息,会在 pip show 中展示 | | url | 个人相关链接(不重要) | | author | 作者 | | author_email | 作者邮箱 | | license | 许可 | | packages | 表示需要打包的名单,惯例是使用
setuptools
的find_package
工具收集目录中含有__init__.py
文件的文件夹 | | zip_safe | 是否使用 zip 压缩 | | include_package_data | 接受 MANIFEST.in 匹配的所有数据文件和目录。 | | install_requires | 重要 :包的相关依赖,在安装该包之前会检查列表中的依赖项并自动安装 | | python_requires | python 版本需求 |
pypi 打包非 py 文件 {#pypi-打包非-py-文件}
pypi 账号 {#pypi-账号}
-
进入官网创建账号 https://pypi.org/
-
在家目录创建文件
- Linux :
~/.pypirc
- Windows:
C:\Users\Username\.pypirc
- Linux :
-
文件内容:
用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。
当前 Pypi 强制要求 2FA 验证方式,不再支持账户密码上传包,需要用户在开通 2FA 验证后使用 API Token
之后 用户名为
__token__
密码为<token_value>
发布 python 包 {#发布-python-包}
- 在命令行中切换到当前目录,输入:
会在当前目录生成 dist
文件夹
-
你可以任选以下两种方式之一发布你的轮子。
- 使用命令:
python setup.py sdist upload
,还是和上面一样,简单但有安全隐患,目前已淘汰。 - 使用 twine:
twine upload dist/*
安装 twine :
- 使用命令:
生成 whl 包 {#生成-whl-包}
- 安装
whell
升级setuptools
- 执行命令
- 在
dist
文件夹中会生成 whl 包 - 可以
pip install xxx.whl
直接安装
管理你的包 {#管理你的包}
如果你的包已经上传成功,那么当你登录PyPI网站后应该能在右侧导航栏看到管理入口。
分享包 {#分享包}
- 现在链接互联网的人讲道理可以使用如下命令来安装我们的包
但是会有一些问题,在国内一般都会换成阿里、清华、中科大等pip源,使用这些默认源无法下载到我们的包
需要手动指定 pypi 源才可以正确下载:
然后过几天,常用的镜像就会把你的包同步进去,就可以不用指定官方项目地址安装包了
可能遇到的错误 {#可能遇到的错误}
-
Upload failed (403): Invalid or non-existent authentication information.
错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc。请参阅上文。 -
Upload failed (403): You are not allowed to edit 'xxx' package information
你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register -
Server response (401): Incomplete registration; check your email
你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。 -
Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier. -
error: No dist file created in earlier command
你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如: -
python setup sdist upload
error: Upload failed (499): Client Disconnected
这应该是网络问题,多重试几次。 -
Upload failed (400): File already exists
文件已经存在了,你每一次上次都应该更新版本号。 -
colorama\ansitowin32.py line 59, in closed return stream.closed
参考资料 {#参考资料}
- https://pypi.org/
- https://blog.csdn.net/tlonline/article/details/79751658
- https://blog.csdn.net/xcntime/article/details/115189401
文章链接:
https://www.zywvvd.com/notes/coding/python/create-my-pip-package/create-my-pip-package/