背景
1、如何将代码打包成能够被pip install 的程序包,方便后续的使用和管理更新。
解决方案
将代码打包成可通过 pip install 安装的程序包涉及几个步骤。以下是创建和发布Python包的基本指南:
- 准备包结构
首先,你需要创建一个合适的包结构。一个基本的包结构通常如下所示:
your_package/
├── your_package/
│ ├── __init__.py
│ └── module1.py
│ └── module2.py
│ └── ...
├── tests/
│ ├── __init__.py
│ └── test_module1.py
│ └── ...
├── setup.py
├── README.md
├── LICENSE
└── requirements.txt
init.py:一个空文件,标识该目录是一个Python包。 module1.py, module2.py 等:你的包的代码文件。 tests/:包含测试代码的目录。 setup.py:包含包的元数据和安装配置的脚本。
README.md:包的说明文件,通常为Markdown格式。 LICENSE:包的许可证文件。
requirements.txt:包的依赖列表。
- 编写 setup.py
setup.py 是一个Python脚本,用于定义包的属性和配置安装过程。以下是一个基本的 setup.py 示例:
from setuptools import setup, find_packages
setup(
name='your_package',
version='0.1.0',
author='Your Name',
author_email='[email protected]',
packages=find_packages(),
include_package_data=True,
url='http://your-package-homepage/',
license='LICENSE',
description='A short description of your package',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
install_requires=[
# 依赖列表
],
classifiers=[
# 包的分类列表,例如:
'Development Status :: 3 - Alpha',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
],
)
-
编写 README.md 和 LICENSE
README.md 应该提供关于包的基本信息,包括它的用途、安装说明、使用方法等。LICENSE 文件应该包含你的包的许可证的完整文本。 -
确定依赖
在 setup.py 中的 install_requires 属性列出了包的依赖。requirements.txt 也可以列出依赖,通常用于开发环境。 -
上传到PyPI前置工作
在上传之前,你需要注册一个PyPI账户。注册链接
注意如果你是第一次使用pypi的话,那么你在上传的时候需要输入的token需要先通过获取2FA验证(一共有两部分),只有通过了2FA的验证才能进行token创建
关于TOTP的这个二维码验证,推荐使用google authenticator来进行。完成验证之后创建对应的token即可,记得保存token。
-
打包上传
步骤:先打包,然后测试是否能成功上传,最后进行上传操作。
1、在包的根目录下运行以下命令来创建包的发行版,这将在 dist/ 目录下创建发行版文件。
python setup.py sdist bdist_wheel
2、上传之前先进行测试上传,通过之后在进行正式上传。出现类似下面的内容则说明上传成功,也可以直接去官网上看。注意:这个地方需要你输入之前保存的Token
python3 -m twine upload --repository testpypi dist/*
3、使用 twine 来上传你的包。确保在上传之前检查 version 号,每次上传应该是一个更高的版本号。注意:这个时候你需要切换到你生产环境的Token,也就是说你上面的操作一共有两遍,在测试环境通过没有问题之后才能够在生产环境当中进行使用。
twine upload dist/*
- 安装包
其他人现在可以使用 pip 来安装你的包,如果你需要进行版本迭代的话请记得修改版本号和说明,然后重复上面的步骤6即可
pip install your_package
注意事项
确保测试你的包在不同的环境中都能正常工作。
考虑使用 setuptools_scm 来自动管理版本号。
阅读 PyPA的打包教程 以获取更多详细信息和最佳实践。
将代码打包并发布为可安装的程序包是一个涉及多个步骤的过程,但遵循上述指南将帮助你顺利完成。
参考文献
python–如何将自己的包上传到PyPi并可通过pip安装
如何打包上传Python程序或模块包到PyPi供其他人使用pip下载?