Python如何用app前缀绝对导入同时兼容PyCharm补全与代码运行
解决方案
完全可以全局使用带app.前缀的导入路径,同时满足PyCharm代码补全和代码正常运行的要求,只需要完成导入语句统一和运行路径配置两步操作即可:
第一步:统一所有导入为带app.前缀的绝对导入
修改各文件的导入语句如下:
- main.py
from app.folder.sum import sum, mul_import from app.mul import mul if __name__ == '__main__': a=1 b=2 print("sum ", sum(a, b)) print("mul ", mul(a, b)) print("mul import ", mul_import(a, b))
- sum.py
from app.mul import mul def sum(a, b): return a + b def mul_import(a, b): return mul(a, b)
mul.py无需修改。
第二步:配置模块搜索路径解决运行报错
报错ModuleNotFoundError: No module named 'app'的核心原因是:Python运行时的模块搜索路径中没有包含app包的父目录(即test_import文件夹),按以下两种场景配置即可:
场景1:在PyCharm中运行
- 右键点击项目根目录
test_import,选择Mark Directory as->Sources Root,告知PyCharm该目录为模块搜索根目录,保证代码补全和语法检查正常 - 打开右上角运行配置
Edit Configurations,找到main.py对应的运行配置,将Working directory修改为test_import文件夹的绝对路径 - 后续直接点击PyCharm的运行按钮即可正常执行
场景2:在命令行中运行
有两种可选方式:
- 方式1:到
test_import目录下,使用模块方式运行:python -m app.main-m参数会自动将当前目录加入Python模块搜索路径,无需额外配置 - 方式2:临时将
test_import路径加入环境变量PYTHONPATH后运行:- Linux/macOS:
export PYTHONPATH=/你的/test_import/绝对路径:$PYTHONPATH python app/main.py - Windows cmd:
set PYTHONPATH=C:\你的\test_import\绝对路径;%PYTHONPATH% python app\main.py - Windows PowerShell:
$env:PYTHONPATH = "C:\你的\test_import\绝对路径;$env:PYTHONPATH" python app\main.py
- Linux/macOS:
原理解释
你之前直接在app目录下运行python main.py时,Python默认只会把main.py所在的app目录加入模块搜索路径,自然找不到上层的app包定义,所以带app.前缀的导入会报错。将test_import加入模块搜索路径后,Python可以直接定位到app包,导入逻辑就和PyCharm的语法检查逻辑完全对齐了。
内容的提问来源于stack exchange,提问作者lovelace63
相关产品推荐
相关产品推荐

