前言

创作开始时间: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啊。

自此,我展开了各种尝试,漫长的探索,其中包括:

  1. 相对import的尝试
  2. 绝对import的尝试
  3. 修改package名字
  4. 重启vscode
  5. 修改vscode的Python interpreter
  6. 删除__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

  1. 根目录下创建.vscode\settings.json

    {
        "python.envFile": "${workspaceFolder}/dev.env",
    }
    
  2. 根目录下创建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都不管用

  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

参考文献

关键文献:

  1. Proper relative imports: “Unable to import module” https://stackoverflow.com/questions/48973742/proper-relative-imports-unable-to-import-module
  2. 在vscode中设置PYTHONPATH https://segmentfault.com/a/1190000019193186
  3. Cannot import any module from folder called “tests” using vscode #8840 https://github.com/microsoft/vscode-python/issues/8840
  4. 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

在看了几十个网页,都没找到有用的,最后反复思考,琢磨了上面这四个文献之后,我终于想到了解决方案。

次要文献:

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐