python setup.py
是 Python 开发中用于构建、安装、分发和管理包的核心命令,它依赖于 setuptools
库,为开发者提供了一套标准化的流程来处理包的元数据、依赖关系、构建逻辑等,通过该命令,开发者可以轻松地将代码打包成可分发的格式(如源码包、wheel 包),或直接在当前环境中安装包及其依赖,以下从功能、常用参数、实际应用场景等方面展开详细说明。

核心功能与常用参数
python setup.py
的核心功能通过不同的子命令实现,以下列举最常用的几个子命令及其作用:
子命令 | 功能描述 | 示例用法 |
---|---|---|
install |
安装包到当前 Python 环境,包括依赖解析 | python setup.py install |
sdist |
创建源码分发包(如 .tar.gz ) |
python setup.py sdist |
bdist_wheel |
创建 wheel 二进制分发包(.whl ) |
python setup.py bdist_wheel |
upload |
上传分发包到 PyPI(需配置 ~/.pypirc ) |
python setup.py upload |
develop |
开发模式安装,修改代码后即时生效 | python setup.py develop |
clean |
清理构建过程中生成的临时文件 | python setup.py clean --all |
setup.py
文件中的 setup()
函数是配置核心,需传入关键参数,如 name
(包名)、version
(版本号)、packages
(包含的模块列表)、install_requires
(依赖包列表)等。
from setuptools import setup, find_packages setup( name="my_package", version="0.1.0", packages=find_packages(), install_requires=["requests>=2.25.0", "numpy"], author="Your Name", author_email="your@email.com", description="A sample Python package", )
实际应用场景
-
开发调试
使用python setup.py develop
可将包以“链接”方式安装到环境,修改代码后无需重新安装即可测试,适合开发阶段快速迭代。 -
分发打包
(图片来源网络,侵删)- 源码包:通过
sdist
生成,包含完整源码和setup.py
,适用于需要编译扩展模块的场景。 - Wheel 包:通过
bdist_wheel
生成,预编译的二进制包,安装速度更快,是目前推荐的主流分发格式。
打包后需通过twine upload
上传至 PyPI(upload
命令已弃用),或通过pip install .
本地安装。
- 源码包:通过
-
依赖管理
install_requires
会自动解析并安装依赖,但需注意版本冲突问题,可通过pip check
检查依赖树。
注意事项
- 虚拟环境:强烈建议在虚拟环境(如
venv
)中执行安装,避免污染全局 Python 环境。 - 兼容性:
setup.py
是传统方案,现代项目更推荐使用pyproject.toml
(PEP 518)和构建后端(如setuptools
、flit
)。 - 安全风险:直接从源码安装可能执行恶意代码,仅信任来源明确的包。
相关问答FAQs
Q1: python setup.py install
和 pip install .
有什么区别?
A: python setup.py install
是直接调用 setuptools
的安装逻辑,依赖解析能力较弱,且可能忽略 pip
的全局配置(如镜像源、依赖版本约束)。pip install .
则通过 pip
管理,支持更严格的依赖解析、缓存和虚拟环境隔离,是推荐的方式。
Q2: 如何在 setup.py
中自动包含所有子模块?
A: 使用 find_packages()
函数可自动发现当前目录下的所有 Python 包(文件夹)。packages=find_packages()
会包含所有子包,而 packages=find_packages(where="src")
可指定源码目录,避免手动列出模块,减少遗漏。
