如何在pyproject.toml中指定Setuptools包的安装后执行脚本?
在pyproject.toml中指定setuptools安装后脚本
可以基于setuptools和pyproject.toml实现安装后自动运行Python脚本,以下是两种可行方案:
方案1:自定义安装命令类
- 在项目根目录创建
setup_commands.py文件,编写继承自标准安装命令的自定义类,在安装完成后执行你的逻辑:
from setuptools.command.install import install class PostInstallCommand(install): def run(self): # 先执行默认安装流程 install.run(self) # 插入你的安装后脚本逻辑 print("开始执行安装后操作...") # 示例:导入并运行包内的安装后处理函数 from your_package.post_install import main main()
- 在pyproject.toml中配置
tool.setuptools.cmdclass,将自定义命令绑定到安装流程:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-package-name" version = "0.1.0" # 补充你的项目元数据(作者、依赖等) [tool.setuptools.cmdclass] install = "setup_commands.PostInstallCommand"
方案2:利用setuptools安装钩子(配合setup.py)
如果不想自定义命令类,可通过注册钩子实现:
- 创建
setup.py文件(仅用于注册钩子,项目元数据仍由pyproject.toml管理):
from setuptools import setup def post_install_handler(): print("安装完成,触发钩子操作...") # 执行你的安装后逻辑 from your_package.post_install import main main() setup( options={ 'install': { 'post_install': post_install_handler, } } )
- 确保pyproject.toml的
build-system配置正确,setuptools会自动读取setup.py中的钩子配置。
注意事项
- 安装后脚本可安全导入你的包模块(安装完成后包已可用),但不要依赖未声明的外部包
- 开发模式安装(
pip install -e .)可能不会触发自定义安装流程,需根据场景调整 - 脚本需保证幂等性,避免重复执行导致异常
内容的提问来源于stack exchange,提问作者David Skarbrevik
相关产品推荐
相关产品推荐

