Python Setuptools能否在安装前执行代码生成动态文件?
解决方案
完全可以实现这个需求,你之前尝试的是post-install方案,但你的需求是在setup.py运行前执行脚本生成文件,这类方案并不适用,得用前置执行的方式来实现。
具体实现步骤
1. 修改pckg1的setup.py
直接在setup.py最开头引入并执行create_new_file.py的生成逻辑,确保setup流程启动前就完成文件生成。示例代码如下:
# 先执行文件生成逻辑 import os import sys # 将当前pckg1目录加入路径,确保能导入create_new_file sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from create_new_file import generate_file # 假设create_new_file里有生成文件的函数generate_file # 执行文件生成 generate_file() # 正常编写setup核心逻辑 from setuptools import setup, find_packages setup( name="pckg1", version="0.1.0", packages=find_packages(), include_package_data=True, # 关键:确保生成的文件被纳入打包 install_requires=[line.strip() for line in open("requirements1.txt").readlines()], )
2. 确保生成的文件被打包
- 在pckg1目录下创建
MANIFEST.in文件,添加生成文件的路径(假设生成的文件是generated_config.py):
include generated_config.py
- 或者直接在setup.py的
package_data字段中指定:
package_data={ "pckg1": ["settings.txt", "generated_config.py"], },
3. 关于pckg2的依赖逻辑
pckg2的requirements2.txt中file:../pckg1的本地依赖配置是有效的,安装pckg2时会优先安装pckg1,此时pckg1的setup.py会先执行文件生成逻辑,再完成打包安装,完全符合你的需求。
为什么之前的方案无效
你之前参考的是post-install脚本方案,这类脚本是在包安装完成后才执行,而你需要的是在打包/安装流程启动前生成文件,因此必须在setup.py本身执行初期就运行生成逻辑。
内容的提问来源于stack exchange,提问作者Galia
相关产品推荐
相关产品推荐

