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

如何在Python构建时自动执行脚本修改包?解决setup.py模块导入问题

问题解答

1. 出现ModuleNotFoundError是否正常?

这是正常现象。原因在于Python执行setup.py时,默认的sys.path并未自动包含项目根目录,而generate_source模块(注意你拼写写成了genreate_source,这也可能是报错的关键原因之一)位于项目根目录下,Python无法定位到该模块路径,因此抛出找不到模块的错误。

2. 能否从setup.py中调用该脚本?

完全可以,以下是两种可靠的实现方式:

方式一:添加路径后导入模块调用函数

先将项目根目录加入Python的搜索路径,再导入模块执行生成逻辑:

import sys
from pathlib import Path
from setuptools import setup

# 获取setup.py所在的项目根目录
project_root = Path(__file__).resolve().parent
# 将项目根目录加入sys.path,让Python能找到generate_source模块
sys.path.insert(0, str(project_root))

# 导入生成模块(注意修正拼写错误:genreate_source → generate_source)
from generate_source.generate_source import your_generate_function

# 先执行源码生成逻辑
your_generate_function()

# 再执行打包逻辑
setup(
    # 你的setup配置项
)

方式二:通过subprocess直接执行脚本

如果不想处理模块导入的路径问题,可以直接用subprocess调用脚本文件:

import sys
import subprocess
from pathlib import Path
from setuptools import setup

project_root = Path(__file__).resolve().parent
# 调用generate_source.py脚本
subprocess.run(
    [sys.executable, str(project_root / "generate_source" / "generate_source.py")],
    check=True,  # 如果脚本执行失败则终止打包
    cwd=str(project_root)
)

# 执行打包逻辑
setup(
    # 你的setup配置项
)

额外注意事项

  • 务必修正模块目录的拼写错误:genreate_source → generate_source,拼写错误会直接导致模块无法被找到。
  • 如果生成脚本依赖第三方库(如requests等),需要在pyproject.toml的[build-system]部分添加这些依赖,确保打包过程中能正常执行生成逻辑:
    [build-system]
    requires = ["setuptools", "wheel", "requests"]  # 添加生成脚本所需的依赖
    build-backend = "setuptools.build_meta"
    

内容的提问来源于stack exchange,提问作者Pierrick Rambaud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:37:48