发布自己的Python包到pypi
大佬们写的包,我们只需要
pip install就能安装了,但是,其实人人都能发布包到pypi。 本教程将指导您如何打包一个简单的Python项目。它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引。
一个简单的项目
本教程使用名为example_pkg_xujhtop的简单项目。
要在本地创建此项目,请创建以下文件结构:
1 | /example_pkg_xujhtop |
cd example_pkg_xujhtop 。您还应该编辑example_pkg_xujhtop/__init__.py并将以下代码放在其中:
1 | name = "example_pkg_xujhtop" |
创建包文件
现在,您将创建一些文件来打包此项目并准备分发。 创建下面列出的新文件 - 您将在以下步骤中向其添加内容。
1 | /example_pkg_xujhtop |
创建setup.py¶
setup.py是setuptools的构建脚本。 它告诉setuptools你的包(例如名称和版本)以及要包含的代码文件。
打开setup.py并输入以下内容,您可以根据需要个性化值:
1 | import setuptools |
- name是包的名称。 只要包含字母,数字, _和- , _可以是任何名称。 它也不能在pypi.org上使用。
- version是包版本见 PEP 440有关版本的更多详细信息。
- author和author_email用于标识包的作者。
- description是包的简短的一句话摘要。
- long_description是包的详细描述。 这显示在Python Package Index的包详细信息包中。 在这种情况下,从README.md加载长描述,这是一种常见模式。
- long_description_content_type告诉索引用于长描述的标记类型。 在这种情况下,它是Markdown。
- url是项目主页的URL。 对于许多项目,这只是一个指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。
- packages是应包含在分发包中的所有Python 导入包的列表。 我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包。 在这种情况下,包列表将是example_pkg_xujhtop,因为它是唯一存在的包。
- classifiers告诉索引并提供有关包的其他元数据。 在这种情况下,该软件包仅与Python 3兼容,根据MIT许可证进行许可,并且与操作系统无关。 您应始终至少包含您的软件包所使用的Python版本,软件包可用的许可证以及您的软件包将使用的操作系统。 有关分类器的完整列表,请参阅https://pypi.org/classifiers/ 。
创建README.md¶
打开README.md并输入以下内容。 如果您愿意,可以自定义此项。
1 | # Example Package |
上传到Python Package Index的每个包都包含许可证,这一点很重要。 这告诉用户安装您的软件包可以使用您的软件包的条款。 有关选择许可证的帮助,请参阅https://choosealicense.com/ 。 选择许可证后,打开LICENSE并输入许可证文本。 例如,如果您选择了MIT许可证:
1 | Copyright (c) 2018 The Python Packaging Authority |
生成分发档案
下一步是为包生成分发包 。 这些是上传到包索引的档案,可以通过pip安装。
确保安装了最新版本的setuptools和wheel :
1 | python3 -m pip install --user --upgrade setuptools wheel |
现在从setup.py所在的同一目录运行此命令:
1 | python3 setup.py sdist bdist_wheel |
1 | dist/ |
tar.gz文件是源存档,而.whl文件是构建的分发 。 较新的pip版本优先安装构建的发行版,但如果需要,将回退到源代码存档。 您应该始终上传源存档并为项目兼容的平台提供构建的存档。 在这种情况下,我们的示例包在任何平台上都与Python兼容,因此只需要一个构建的发行版。
上传分发档案
最后,是时候将您的包上传到Python Package Index了!
您需要做的第一件事是在Test PyPI上注册一个帐户。 Test PyPI是用于测试和实验的包索引的单独实例。 这对于像我们不一定想要上传到真实索引的本教程那样很棒。 要注册帐户,请访问https://test.pypi.org/account/register/并完成该页面上的步骤。 在您上传任何软件包之前,您还需要验证您的电子邮件地址。 有关Test PyPI的更多详细信息,请参阅使用TestPyPI 。
现在您已注册,您可以使用twine上传分发包。 你需要安装Twine:
1 | python3 -m pip install --user --upgrade twine |
1 | twine upload --repository-url https://test.pypi.org/legacy/ dist/* |
1 | Uploading distributions to https://test.pypi.org/legacy/ |
The user '[your username]' isn't allowed to upload to project 'example-pkg' ,则需要为您的包选择一个唯一的名称。 一个不错的选择是example_pkg_xujhtop 。 更新setup.py的name参数,删除dist文件夹,然后重新生成存档 。上传后,您的包应该可以在TestPyPI上查看,例如, https://test.pypi.org/project/example-pkg
安装新上传的软件包
您可以使用pip来安装包并验证它是否有效。 创建一个新的virtualenv (请参阅安装包以获取详细说明)并从TestPyPI安装包:
1 | python3 -m pip install --index-url https://test.pypi.org/simple/ example_pkg_xujhtop |
pip应该从Test PyPI安装包,输出应该如下所示:
1 | Collecting example_pkg_xujhtop |
__init__.py的name属性来测试它是否已正确安装。运行Python解释器(确保你仍然在你的virtualenv中):
1 | python |
name属性。 无论您在setup.py给出的分发包名称是什么,这都应该是相同的,因为您的导入包是example_pkg_xujhtop 。1 | import example_pkg_xujhtop |
后续步骤
恭喜,您已经打包并分发了一个Python项目! ✨
- 标题: 发布自己的Python包到pypi
- 作者: Oliver xu
- 创建于 : 2018-10-07 11:36:00
- 更新于 : 2025-11-06 21:07:29
- 链接: https://blog.oliverxu.cn/2018/10/07/发布自己的Python包到pypi/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。