Python 3.10模块导入兼容问题:应用与单元测试双场景解决方案问询
Python 3.10包结构导入问题解决方案
前提假设的项目结构
repoName/ ├── __init__.py ├── app/ │ ├── __init__.py │ └── first.py └── unitTests/ ├── __init__.py └── test_example.py
具体修改步骤
1. 统一使用绝对导入
所有内部模块导入都基于顶级包repoName:
- 在
app/first.py中,若需导入同包内的其他模块(如second.py),写法如下:from repoName.app import second - 在
unitTests/test_example.py中导入first.py的内容,写法如下:from repoName.app.first import target_function
2. 给直接运行的脚本添加路径修复
在app/first.py的最顶部插入以下代码,确保直接运行时Python能找到顶级包:
import sys from pathlib import Path # 获取repoName目录的绝对路径 repo_root = Path(__file__).parent.parent # 将repo根目录添加到Python搜索路径 sys.path.append(str(repo_root))
3. 补全必要的__init__.py文件
在repoName/、app/、unitTests/三个目录下都创建空的__init__.py文件,让Python将这些目录识别为合法包。
验证运行
- 直接运行应用:
python repoName/app/first.py - 运行单元测试:
python -m unittest repoName.unitTests.test_example
注意事项
- 避免使用相对导入(如
from . import xxx),相对导入在直接运行脚本时会触发路径问题,绝对导入兼容性更强。 - 该结构后续可直接适配Python打包工具(如setuptools),只需添加
pyproject.toml或setup.py即可完成发布配置。
内容的提问来源于stack exchange,提问作者CodeMed
相关产品推荐
相关产品推荐

