如何使用setuptools实现Python包安装后执行脚本(替代distutils)
基于setuptools的自定义安装命令解决方案
针对原问题中需要自定义Python包安装流程的需求,这里提供完全基于setuptools的实现方案,替代已废弃的distutils写法:
from setuptools import setup from setuptools.command.install import install as _install import subprocess import os class CustomInstall(_install): def run(self): # 先执行标准安装流程,确保包文件正常安装 super().run() # 这里添加你的自定义操作,示例:安装后运行初始化脚本 # 替换成你需要执行的逻辑即可 init_script = os.path.join(self.install_lib, 'your_package', 'init.py') if os.path.exists(init_script): subprocess.run(['python', init_script], check=True) setup( name='your_package', version='1.0.0', packages=['your_package'], # 注册自定义安装命令 cmdclass={'install': CustomInstall}, )
关键说明:
- 直接继承
setuptools.command.install.install类,而非distutils的旧版本,避免依赖废弃模块 - 重写
run方法时,必须先调用super().run()(或_install.run(self)),保证标准的安装步骤(如复制包文件、生成脚本等)正常执行 - setuptools的install类保留了distutils中常用的路径属性,比如:
self.install_lib: 包文件被安装到的目标目录self.install_scripts: 可执行脚本的安装目录self.install_data: 数据文件的安装目录
- 如果需要自定义命令行参数,可以重写
initialize_options和finalize_options方法来处理
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

