Python Packages - ImportError问题:Riot API封装包模块组织及测试套件构建受阻
排查Python打包时ImportError的实用思路
嘿,我之前打包Python模块的时候也踩过ImportError的坑,太懂这种明明本地跑的好好的,一打包就崩的郁闷了!结合你做Riot API封装器的场景,给你列几个最可能的排查方向:
模块结构与导入方式问题
本地运行时的路径和打包后的包路径差异是最常见的诱因:- 检查内部导入语句:如果封装器里用了
from .utils import xxx这类相对导入,要确保包结构规范——根目录建议保留__init__.py(Python 3.3+虽支持无init的命名空间包,但打包工具对传统包的兼容性更好)。 - 核对打包配置:如果你用
setuptools,要确认setup.py里的packages=find_packages()能正确识别所有子模块;用poetry的话,pyproject.toml的packages字段要覆盖你的封装器目录。
- 检查内部导入语句:如果封装器里用了
依赖包未正确声明
Riot API封装肯定依赖了requests这类第三方库,如果打包时没把依赖同步进去,安装后运行就会触发ImportError:- 把所有依赖写入
requirements.txt,或者在pyproject.toml的dependencies字段里明确声明(比如requests>=2.28.0)。 - 打包前可以先在干净的虚拟环境里测试安装,验证依赖是否自动安装齐全。
- 把所有依赖写入
测试套件的路径适配问题
你提到准备做测试套件,测试文件的位置和导入方式也可能影响:- 如果测试文件在项目根目录,而封装器在子目录(比如
lol_wrapper/),测试时不要直接写import lol_wrapper,除非你已经把项目根目录加到Python路径里。可以在测试文件开头临时添加路径:import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) - 更推荐用
pytest这类测试框架,配合规范的包结构,打包后测试用例也能正常执行。
- 如果测试文件在项目根目录,而封装器在子目录(比如
避免命名冲突
检查你的模块/文件名有没有和Python内置模块、第三方库重名——比如如果你的文件叫requests.py,导入时会优先加载你自己的文件,而非第三方的requests库,直接导致依赖导入失败。
如果能提供具体的错误回溯信息(比如哪一行报错、尝试导入的模块名),能更快定位到问题根源,不过先试试上面的步骤应该能解决大部分打包时的ImportError~
内容的提问来源于stack exchange,提问作者matt murray
相关产品推荐
相关产品推荐

