发布Python包到PyPi/Anaconda时子目录包含及导入报错问题求解
问题核心原因
你的导入错误是包内模块的导入路径配置错误导致的:algorithms是example包的子模块,而非全局顶层模块。你直接在site-packages的example目录下运行main.py时,当前工作目录就是example目录,Python导入时会优先查找当前工作目录下的模块,所以可以正常找到algorithms;但从包外导入example.main时,运行的工作目录不是example目录,因此无法直接识别无前缀的algorithms路径。
可行解决方案
1. 修正example/main.py的导入语句
二选一即可,推荐使用绝对导入:
- 绝对导入写法(适配所有调用场景):
将from algorithms.sketch.data import *修改为
from example.algorithms.sketch.data import *
所有其他引用algorithms下子模块的导入语句,都按照这个格式补全前缀example.。
- 相对导入写法(仅适配包内模块调用场景):
将from algorithms.sketch.data import *修改为
from .algorithms.sketch.data import *
前缀.代表从当前main.py所在的example包目录下查找子模块。
2. 确认setup.py配置
你用find_packages()的版本已经可以正常识别所有子包,不需要手动罗列所有包路径,配置是正确的。
3. 验证修改
执行以下命令测试修改是否生效:
- 卸载本地已安装的旧版本包:
pip uninstall -y example - 在项目根目录(setup.py所在目录)执行本地安装:
pip install . - 切换到任意非项目目录打开Python终端,执行
from example.main import *验证导入是否正常。
内容的提问来源于stack exchange,提问作者Weilory
相关产品推荐
相关产品推荐

