本文最后更新于:2024年5月7日 下午
python 公用的包可以使用 pip 管理工具方便地下载、使用、管理,那么如何将自己的工具包上传到 pip 服务器供别人下载呢,本记录相关内容。
简介
python 包可以使用 pip 工具方便地管理,分享和使用。
- 使用python包模块有很多好处:
- 可以使用
pip
之类的命令来管理和安装python模块,避免手动管理引用文件。 - 方便共享我们的python包。
- 在一个模块中可以添加文档。
- 在python包与包之间有很多的相互依赖,引入包模块可以预先加载所有需要的包,避免由于模块之间依赖造成的问题。
- 核心的源服务器
The Python Package Index (PyPI)
为 https://pypi.org/
pip 源初始的形态,我们希望把自己的包也上传到这里。
创建自己的 python 包
先置条件
要把自己的包发布到pip上,需要满足以下几个条件:
- 目录下的所有文件名均为英文小写
- 不包含下划线,空格和特殊字符(支持中划线,但也不建议使用)
- 选定的包名在 pypi 网站上没有使用过,可以访问官网,搜索一下想用的名字有没有被占用。
包结构
我们的包名称为 utils-vvd
(示例)
1 |
|
-
需要在包最外层目录创建
setup.py
文件,用于打包和发布 -
setup.py 文件内容
1 |
|
-
其中
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 文件
1 |
|
pypi 账号
-
进入官网创建账号 https://pypi.org/
-
在家目录创建文件
- Linux :
~/.pypirc
- Windows:
C:\Users\Username\.pypirc
- Linux :
-
文件内容:
1 |
|
用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。当前 Pypi 强制要求 2FA 验证方式,不再支持账户密码上传包,需要用户在开通 2FA 验证后使用 API Token
之后 用户名为
__token__
密码为<token_value>
发布 python 包
- 在命令行中切换到当前目录,输入:
1 |
|
会在当前目录生成 dist
文件夹
-
你可以任选以下两种方式之一发布你的轮子。
- 使用命令:
python setup.py sdist upload
,还是和上面一样,简单但有安全隐患,目前已淘汰。 - 使用 twine:
twine upload dist/*
安装 twine :
1
pip install twine
- 使用命令:
生成 whl 包
- 安装
whell
升级setuptools
1 |
|
- 执行命令
1 |
|
- 在
dist
文件夹中会生成 whl 包 - 可以
pip install xxx.whl
直接安装
管理你的包
如果你的包已经上传成功,那么当你登录PyPI网站后应该能在右侧导航栏看到管理入口。
分享包
- 现在链接互联网的人讲道理可以使用如下命令来安装我们的包
1 |
|
但是会有一些问题,在国内一般都会换成阿里、清华、中科大等pip源,使用这些默认源无法下载到我们的包
需要手动指定 pypi 源才可以正确下载:
1
pip install -i https://pypi.org/project utils-vvd
然后过几天,常用的镜像就会把你的包同步进去,就可以不用指定官方项目地址安装包了
可能遇到的错误
-
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/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付