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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:45:28