问题

在包含子程序包的Python项目中,绝对导入在不在项目根目录中的任何文件中都不起作用.

-  my_project
  -  my_package
    - __init__.py
    - my_module.py
  - my_scripts
    - some_script.py

some_script.py

import sys
print('\n'.join(sys.path))

from my_package.my_module import hello_world
hello_world()

Output (PyCharm)

D:\_MyFiles\Programming\Projects\python-import-demo\my_scripts
D:\_MyFiles\Programming\Projects\python-import-demo
***list of unrelated paths***

Hello, World!

Output (VS Code)

d:\_MyFiles\Programming\Projects\python-import-demo\my_scripts
***list of unrelated paths***

Traceback (most recent call last):
  File "d:\_MyFiles\Programming\Projects\python-import-demo\my_scripts\some_script.py", line 4, in <module>
    from my_package.my_module import hello_world
ModuleNotFoundError: No module named 'my_package'

变通办法

  • 使用相对导入(这会打破__main__个块)
  • 编辑项目级launch.json配置(通过顶栏或CLI运行.py文件时仍会出现问题)
  • pip install -e MY_PROJECT(我不想对我打开的每个项目重复这一点)
  • 显式地找到项目根目录,并在我自己的代码中将其附加到sys.path(在我看来,这很恶心,但如果我想将项目发送给某人,并且让他们在没有额外配置的情况下简单地工作,这是很好的)

我找到了所有这些变通办法herehere

问题

有没有办法在全局解决VS代码的这个问题?当我在PyCharm中打开一个项目并运行任何.py文件时,绝对导入只会自动工作,不需要任何手动配置,因为项目根被添加到sys.path,这就是我想要的VS代码.我不想在每个新项目上都使用上面的任何变通方法.

推荐答案

通过将其添加到settings.json修复了它

  "terminal.integrated.env.windows": {
    "PYTHONPATH": "${workspaceFolder}"
  }

Python相关问答推荐

如何自动抓取以下CSV

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

使用Python从URL下载Excel文件

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

使用特定值作为引用替换数据框行上的值

Python全局变量递归得到不同的结果

手动设置seborn/matplotlib散点图连续变量图例中显示的值

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

OpenGL仅渲染第二个三角形,第一个三角形不可见

jsonschema日期格式

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

Python日志(log)库如何有效地获取lineno和funcName?

Django在一个不是ForeignKey的字段上加入'

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子