Python 打包与发布:setuptools 和 wheel 的全攻略

liftword4个月前 (02-26)技术文章25

Python 项目打包与发布:setuptools 和 wheel

Python 提供了强大的工具链,用于将项目打包并分发到包管理器(如 PyPI)。setuptoolswheel 是其中的核心工具。


1. 什么是 setuptools 和 wheel?

  • setuptools:用于构建和打包 Python 项目,支持依赖管理和复杂的配置。
  • wheel:一种打包格式(.whl),是 Python 包的标准分发形式,安装速度快、效率高。

2. 项目打包的基础结构

以下是一个典型的项目结构:

arduino

Copy code

my_project/

├── my_package/

│ ├── __init__.py

│ ├── module1.py

│ └── module2.py

├── tests/

│ ├── test_module1.py

│ └── test_module2.py

├── setup.py

├── README.md

├── LICENSE

└── requirements.txt



  • my_package/:核心代码。
  • tests/:测试代码。
  • setup.py:配置打包信息。
  • requirements.txt:列出依赖项。

3. 创建 setup.py

setup.py 是项目打包的配置文件。以下是一个基本示例:

python

Copy code

from setuptools import setup, find_packages



setup(

name="my_project", # 项目名称

version="0.1.0", # 版本号

description="A sample Python project", # 简短描述

long_description=open("README.md").read(), # 详细描述


long_description_content_type="text/markdown", # 描述文件格式

author="Your Name", # 作者

author_email="your_email@example.com", # 作者邮箱

url="
https://github.com/your_username/my_project", # 项目主页

license="MIT", # 开源协议

packages=find_packages(), # 自动发现子包

install_requires=[ # 项目依赖

"numpy>=1.21.0",

"requests>=2.26.0"

],

classifiers=[ # 分类信息

"Programming Language :: Python :: 3",

"License :: OSI Approved :: MIT License",

"Operating System :: OS Independent",

],

python_requires=">=3.6", # 支持的 Python 版本

)




4. 构建项目

安装依赖

首先安装打包所需工具:

bash

Copy code

pip install setuptools wheel



构建分发包

在项目根目录运行以下命令:

bash

Copy code

python setup.py sdist bdist_wheel



  • sdist:生成源代码分发包,通常是 .tar.gz 文件。
  • bdist_wheel:生成 Wheel 分发包(.whl 文件)。

运行后,你将在项目的 dist/ 文件夹中看到生成的包文件。


5. 发布到 PyPI

安装发布工具

bash

Copy code

pip install twine



发布包

将生成的包上传到测试 PyPI(用于测试):
bash
Copy code
twine upload --repository-url
https://test.pypi.org/legacy/ dist/*


验证测试包可用后,上传到正式 PyPI:
bash
Copy code
twine upload dist/*


验证发布

安装发布的包:

bash

Copy code

pip install my_project




6. 常见问题与解决方法

1. 没有生成 .whl文件

确保安装了 wheel 工具:

bash

Copy code

pip install wheel



2. 上传失败

检查 PyPI 的用户名和 API 密钥是否正确,或者检查网络连接。

3. 包含静态文件

如果项目中有非代码文件(如配置文件或图片),需要在 setup.py 中配置 include_package_data=True 并添加 MANIFEST.in 文件:

php

Copy code

include README.md

include LICENSE

recursive-include my_package/data *




7. 未来趋势

随着 Python 包管理的发展,以下工具也值得关注:

  • poetry:更现代化的依赖管理和打包工具。
  • flit:用于简单项目的轻量级打包工具。

通过本文的步骤,您可以快速上手 Python 项目的打包与发布,构建属于自己的 PyPI 包!

相关文章

三分钟掌握Python 中最常用的 10 种 Set 方法

Python 中的集合至关重要,也是 Python 中最常用的内置数据类型之一。集合具有一些主要属性。集合中的元素必须是唯一的。套装中不允许有重复项。它们是无序的设置项目不可更改,但您可以删除和添加新...

Python集合类型Set详细总结_python里面集合

(一)Python集合数据类型Set总结-1 1、set特点set 可以过滤重复元素,本身是无序的(元素顺序是混乱的)不重复的示例-1:set = {1,2,2,3,4,4,5,6,7,7}#输出se...

Python基础之Set集合操作_python set取并集

''' 集合是无序和无索引的集合。在 Python 中,集合用花括号编写。 集合set,元素是不可重复的 ''' # 创建集合 demoSet = {'a', 'b', 'c'} p...

Python set_python set和list的区别

Python 也包含有 集合 类型。集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。集合对象也支持像 联合,交集,差集,对称差分等数学运算。集合结构如下:set1 = {'h...

Python基础篇(三)dict和set类型_python dicts

dict一、dict的定义dict即字典,相当于golang中的map类型,key-value型.具有极快的查找速度.由于dict中key的值是唯一的,因此如果多次赋值,最终结果为最后一次的赋值.二、...