setup.py的作用是定义和配置可安装的
python
包,用于声明包名、版本、依赖等信息。它通过调用setuptools.setup()函数实现包的构建与安装逻辑,常用于传统项目中。编写时需注意使用find_packages()自动发现包结构,install_requires声明依赖项,并填写作者、描述等元数据。常见注意事项包括:手动更新版本号、避免打包测试代码、合理使用console_scripts定义入口脚本、区分运行依赖与开发依赖。虽然setup.py仍是许多老项目的核心工具,但新项目推荐使用pyproject.toml等现代方案替代。
在Python项目中,
的作用主要是定义和配置一个可安装的Python包。它不是必须的(现在也有其他工具如
),但在很多传统项目和工具链中仍然非常常见。简单来说,它是告诉pip、setuptools等工具“这个包叫什么、包含哪些内容、依赖哪些库”等信息的核心文件。
什么是setup.py
是一个Python脚本,通常放在项目的根目录下。它的核心作用是调用
函数来声明包的元数据和构建逻辑。当你运行
或者
时,系统就会读取这个文件并据此安装你的包。
它里面常见的字段包括:
: 包名
: 版本号
: 要打包的模块列表
: 安装依赖
,
,
等基本信息
如何编写一个基本的setup.py
写一个可用的
其实不难,重点在于结构清晰、信息准确。下面是一个最简示例:
立即学习
“
Python免费学习笔记(深入)
”;
关键点说明:
使用
可以自动发现所有含
的目录作为包
用来声明依赖项,确保用户安装时不缺组件
尽量填写完整作者、描述等信息,这对发布到PyPI很重要
常见注意事项和坑点
虽然
看起来简单,但实际使用中还是有几个容易忽略的地方:
版本号更新要手动改
:不像某些语言可以自动生成,Python包的版本号需要你每次发版时手动修改。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
不要把测试代码打进包里
:如果你用了
,记得加上
避免误打包。
入口脚本可以用console_scripts定义
:比如你想让用户通过命令行直接运行某个脚本,可以加:
注意区分开发依赖和运行依赖
:有些库只是用于测试或构建文档,不应该出现在
里。可以通过
来分组管理。
是否还值得继续用setup.py
虽然
很经典,但现在官方推荐使用
配合
或者
等现代工具来管理项目。
本身已经被标记为“legacy”,但目前仍有大量项目依赖它,尤其是企业内部的老项目。
所以结论是:如果你维护的是老项目,了解和掌握
依然是必要的;如果是新项目,可以考虑更现代化的方式,但理解它的原理仍然有帮助。
基本上就这些。setup.py不算复杂,但细节很容易忽略,特别是在版本管理和依赖控制上,稍不注意就可能让使用者踩坑。
setup.pypyproject.tomlsetup.pysetuptools.setup()python setup.py installpip install .nameversionpackagesinstall_requiresauthordescriptionurlsetup.pyfrom setuptools import setup, find_packages
setup(
name='my_package',
version='0.1.0',
packages=find_packages(),
install_requires=[
'requests',
'numpy'
],
author='Your Name',
description='A simple example package',
url='https://github.com/yourname/yourrepo',
)find_packages()__init__.pyinstall_requiressetup.pyfind_packages()exclude=['tests*']entry_points={
'console_scripts': [
'mycmd=my_package.cli:main',
],
},install_requiresextras_requiresetup.pypyproject.tomlbuildpoetrysetup.pysetup.py