导入subpackage模块触发ModuleNotFoundError的问题求助
解决Python子包导入ModuleNotFoundError问题
你遇到的问题核心是导入路径错误:subpackage是package的子包,并非顶级模块,Python解释器无法在全局路径中定位它。而pytest默认会将项目根目录加入Python路径,因此能正常解析导入。
以下是具体解决方案:
方案1:改用绝对导入
将所有导入语句改为从顶级包package开始的绝对路径:
- main.py修改为:
from package.subpackage.dbase import module1 from package.subpackage.containers import module2, module3
- dbase.py修改为:
from package.subpackage.containers import module2
从my_project目录运行uvicorn package.subpackage.main:app时,Python会自动识别项目根目录,从而正确解析导入路径。
方案2:使用相对导入
在子包内部模块间引用时,采用相对路径(.代表当前目录):
- main.py修改为:
from .dbase import module1 from .containers import module2, module3
- dbase.py修改为:
from .containers import module2
这种方式更适合包内部模块的互相调用,无需依赖顶级包名,结构更灵活。
方案3:将项目根目录加入Python路径
如果不想修改代码,可临时设置环境变量让Python识别项目目录:
- Linux/macOS终端:
export PYTHONPATH=/path/to/my_project uvicorn package.subpackage.main:app
- Windows命令提示符:
set PYTHONPATH=C:\path\to\my_project uvicorn package.subpackage.main:app
也可以将项目以开发模式安装到Python环境,在my_project目录下运行:
pip install -e .
(需确保项目根目录有setup.py或pyproject.toml配置文件),之后即可在任意目录运行uvicorn命令。
内容的提问来源于stack exchange,提问作者Roostique
相关产品推荐
相关产品推荐

