You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:35:27