【已解决】【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啊。

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

  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

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

次要文献:

### 回答1: 在VSCode中新建Python包的步骤如下: 1. 在VSCode中打开一个Python项目文件夹,例如在左侧的资源管理器中选择“打开文件夹”并选择一个Python项目文件夹。 2. 在项目文件夹中右键单击,选择“新建文件夹”。 3. 在弹出的对话框中输入包的名称,例如“my_package”。 4. 在“my_package”文件夹中新建一个名为“__init__.py”的空文件,这个文件是Python包的标志文件。 5. 在“my_package”文件夹中新建其他Python模块文件,例如“module1.py”、“module2.py”等。 6. 在其他Python模块文件中可以使用“from my_package import module1”等语句来引用“my_package”包中的模块。 注意:在VSCode中新建Python包时,需要手动创建“__init__.py”文件,否则会被视为普通文件夹而不是Python包。 ### 回答2: 在VS Code中创建Python包有几个简单的步骤: 1. 在要创建Python包的文件夹中新建一个文件夹,这个文件夹的名称就是包的名称。 2. 在创建的文件夹中新建一个名为__init__.py的空文件。这是Python中定义包的标准方式。 3. 在__init__.py文件中添加任何需要的初始化代码和任何需要导入的功能,例如: from . import module1 from . import module2 4. 在包的根目录中添加其他Python模块文件并将它们保存在新建的包文件夹中。 5. 使用import语句在其他Python程序中导入创建的包。 这样就完成了在VS Code中创建Python包的过程。当然,在实际应用过程中,还可以通过设置扩展插件和利用VS Code的自动完成功能来加快Python包的开发过程。 ### 回答3: 在VS Code中创建Python包,通常需要遵循以下几个步骤: 1. 打开VS Code软件并创建工作空间 为了创建Python包,首先需要打开VS Code软件,并创建一个工作空间。工作空间通常是包含所有项目文件的文件夹,用于保存代码文件和其他相关文件。 2. 创建一个新文件夹来存放Python包 在工作空间中,右键单击鼠标并选择“新建文件夹”选项来创建一个新的文件夹。建议将其命名为与包名的名称。 例如,如果要创建一个名为“my_package”的Python包,那么可以命名它为“my_package”。 3. 在新文件夹中创建__init__.py文件 创建Python包的关键步骤之一是创建一个名为“__init__.py”的特殊文件。这个文件用于定义所有Python包中可导入的模块。在新文件夹中新建一个文本文件,并将其命名为“__init__.py”。 4. 在包中创建模块 第四步是在Python包中创建一个或多个模块。模块是Python程序中的单个代码文件。在新文件夹中新建一个文件,命名为方法名或任务类型。可以将创建的文件保存为.py文件,已经定义好前缀"def"的python文件。 5. 导入包 要使用新创建的Python包,需要在Python程序中导入它。可以使用“import”命令导入整个包,也可以导入包中的单个模块。可以在Python程序开头写as关键字与包名名,如"import Demo_Module as Demo",这就是一个简单可读的包名。 这些步骤是创建Python包的基础步骤。完成这些步骤后,可以在Python程序中使用自定义包及其模块。另外,调整工程路径和环境变量等要素,也会影响到python类库(package)的调用和解析。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值