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

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

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 set_python set和list的区别

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

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

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

Python基础知识之集合(set)中交集、并集、差集运算

集合中最常见的操作就是并集、交集和差集,为了更好地学习这些知识和编程实现方式。我们从并集、交集和差集各运算的含义开始讲解。并集:取两集合全部的元素。交集:取两集合公共的元素。差集:取一个集合中另一集合...

python开发破译WiFi教程,你不看看吗?

一、安装python环境(1)首先安装在python 官网安装python环境(https://www.python.org/getit/)(2)选择Downloads--Windows点开,如图所示...

Python 多线程之 Redis 分布式锁_使用redis实现分布式锁及其优化

前言在很多互联网产品应用中,有些场景需要加锁处理,例如:双11秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于 DB 实现的,Redis 为单进程单线程模式,采用队列模式将并发访问变成串行访问...

一个开源免费高颜值的轻量级商业智能BI平台Superset 介绍

传统的企业信息化,一般分为三个发展阶段:手工-》系统化(电子化),系统化-》跨系统集成整合(消除信息孤岛,形成一个整体),集成整合-》决策支持(面向中高层领导进行数据分析),即可称商务智能或商业智能领...