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

构建Python包时setup.py导入失败问题求助

问题根源与解决方案

核心问题

你遇到的冲突是两种运行场景下Python的sys.path不同:

  • 直接运行内层tests.py时,Python会把当前目录(内层cool_package)加入sys.path,所以import module1/module2能直接找到同目录下的模块。
  • 运行外层setup.py时,Python的sys.path只包含setup.py所在的外层目录,此时module1里的import module2会尝试寻找顶层的module2模块,而非cool_package子目录下的,因此报错。

分步解决方案

1. 统一包内模块的相对导入规范

包内部的模块之间必须使用相对导入,这是Python包的标准做法:

  • 修改module1.py的导入代码:
    from . import module2
    
  • 如果你的__init__.py是从module1导入函数,也改成相对导入:
    from .module1 import your_function1, your_function2
    

2. 修正测试脚本的运行方式

直接运行tests.py会导致它被当作顶层脚本,无法识别相对导入。你需要从外层目录(包含setup.py的那个目录),以模块方式运行测试:

python -m cool_package.tests

同时,把tests.py的导入也改成相对或绝对导入:

# 相对导入方式(推荐,符合包结构)
from . import module1, module2

# 或者绝对导入方式
import cool_package.module1 as module1
import cool_package.module2 as module2

3. 正确配置setup.cfg

你的setup.cfg配置是有效的,只需要确保格式正确(注意空格),让setuptools能正确找到包:

[options]
packages = find:
package_dir =
    = cool_package

[options.packages.find]
where = cool_package

setup.py保持原有的极简版本即可,不需要额外添加py_modules或package_dir参数,因为配置已经在setup.cfg里定义了。

4. 验证安装与运行

从外层目录执行开发模式安装(方便调试):

pip install -e .

安装后,无论是运行setup.py还是在其他地方导入cool_package,都不会再出现模块找不到的问题。


内容的提问来源于stack exchange,提问作者Bob Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:25:16