【已解决】【VSCode Python同项目内的import问题】在VSCode的Python项目中正确地import同项目下其他package中的module
前言
创作开始时间:2021年8月13日04:36:49
更新:2021年9月29日18:42:26
更新2:2023年2月15日15:50:54
研究了很久的时间,网上根本没找到合适的解决方案,最后终于解决了这个困扰我已久的问题,这里记录解决方案。
另外,本文还补充了:在windows上的配置方法。
1、问题描述
- ubuntu系统
- VSCode
- Anaconda
- pylint
我的项目结构是这样的。
├── myproject
│ ├── .vscode
│ │ ├── launch.json
│ │ ├── settings.json
│ ├── src
│ │ ├── packageA
│ │ │ ├── __init__.py
│ │ │ ├── moduleA1
│ │ │ ├── moduleA2
│ │ ├── __init__.py
│ │ ├── main.py
│ │ └── __pycache__
│ ├── dev.env
│ └── tests
│ ├── testA.py
│ └── __init__.py
我有一个源文件夹src,还有一个tests文件夹(放测试用例的)
我写了一个测试模块testA.py
里面import了:
from src.packageA import moduleA1
就是说想import其他package中的module,然而竟然报错:
ModuleNotFoundError: No module named ‘packageA’
我真的无语了,packageA明明是一个package,不是module啊。
自此,我展开了各种尝试,漫长的探索,其中包括:
- 相对import的尝试
- 绝对import的尝试
- 修改package名字
- 重启vscode
- 修改vscode的Python interpreter
- 删除__pycache__文件夹
等等…
都没有用!
现在在下面给出原因和解决方案。
2、原因+解决方案
原因: VSCode中需要显式地声明PYTHONPATH,不然根本找不到本项目内的模块和包的路径。
解决方案:
在myproject文件夹(即项目根目录)下创建dev.env
:
PYTHONPATH=./src:./tests:${PYTHONPATH}
然后在.vscode/settings.json
下写入:
{
"python.envFile": "${workspaceFolder}/dev.env"
}
然后重新运行一下,发现再也不报错了!
其他方法
备注:
其实我以前用的都是
import sys
sys.path.append(xxx)
这样也可以用,但是我觉得太笨重了,我就希望简简单单的直接import:(不需要任何sys path append)
from src.packageA import moduleA1
所以在此作如上探究。
在windows上的配置方法
解决方案1
-
根目录下创建
.vscode\settings.json
:{ "python.envFile": "${workspaceFolder}/dev.env", }
-
根目录下创建
dev.env
:WORKSPACE_FOLDER=D:/xxx/xxx/mappo/ PYTHONPATH=${WORKSPACE_FOLDER}/src;${WORKSPACE_FOLDER}/tests
解决方案2
直接在launch.json上加上:
"env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"},
如下图:
参考:How to correctly set PYTHONPATH for Visual Studio Code https://stackoverflow.com/questions/53653083/how-to-correctly-set-pythonpath-for-visual-studio-code
解决方案3(如果1、2都不管用)
- 要注意:路径不要有中文
- 在文件的开始加入:
import sys
sys.path.insert(0,r'D:\xxx\minisim\minibin')
就不报错了。
2023年2月15日15:53:10
小结
以上。
创作结束时间:2021年8月13日04:55:51
参考文献
关键文献:
- Proper relative imports: “Unable to import module” https://stackoverflow.com/questions/48973742/proper-relative-imports-unable-to-import-module
- 在vscode中设置PYTHONPATH https://segmentfault.com/a/1190000019193186
- Cannot import any module from folder called “tests” using vscode #8840 https://github.com/microsoft/vscode-python/issues/8840
- Use a python package in the same project folder in visual studio code https://stackoverflow.com/questions/53778741/use-a-python-package-in-the-same-project-folder-in-visual-studio-code
在看了几十个网页,都没找到有用的,最后反复思考,琢磨了上面这四个文献之后,我终于想到了解决方案。
次要文献:
- 执行文件异常报错:ImportError: attempted relative import with no known parent package https://www.cnblogs.com/xxcr/p/12781457.html
- Python项目文件引用问题:ImportError: attempted relative import with no known parent package https://blog.csdn.net/qq_23926575/article/details/107510234
- 究极破解:尝试导入,但找不到父包!ImportError: attempted relative import with no known parent package https://blog.csdn.net/weixin_45331210/article/details/98745748
- 【ImportError】: attempted relative import with no known parent package https://blog.csdn.net/ybw_2569/article/details/98775794
更多推荐
所有评论(0)