【已解决】【VSCode Python同项目内的import问题】在VSCode的Python项目中正确地import同项目下其他package中的module

在Ubuntu环境下使用VSCode进行Python开发时遇到模块导入问题,通过在项目根目录创建dev.env并配置PYTHONPATH环境变量,以及在.vscode/settings.json中指定envFile,可以成功解决VSCode找不到项目内模块的问题。此外,文中还提供了Windows系统的配置方法,包括直接在launch.json中设置PYTHONPATH或使用sys.path.append()。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

次要文献:

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值