我正在尝试理解VSCode与运行存储在项目子包中的python脚本有关的行为。如果我的项目结构如下所示:
proj/
util/
main/hello.py
test/如果hello.py从proj.util导入--我使用‘’来执行脚本,它会失败,Module (proj.util) --因为默认情况下,项目顶层目录不会添加到pythonpath。如果我在根目录中创建一个.env文件,并为PYTHONPATH添加一个定义,以包含我的项目顶层目录,那么在通过上面的选项运行时,该文件同样不会被使用。
如果我创建一个默认的调试启动集,并使用' debug -Python文件在终端‘-这将读取.env文件并按预期工作。
在终端中运行脚本时,PyCharm会自动将顶级项目目录添加到sys.paths --难道VSCode不应该提供这样的选项吗?
当前版本如下,尽管我在Windows下看到了相同的行为。
Version: 1.30.1
Commit: dea8705087adb1b5e5ae1d9123278e178656186a
Date: 2018-12-18T22:23:23.072Z
Electron: 2.0.16
Chrome: 61.0.3163.100
Node.js: 8.9.3
V8: 6.1.534.41
OS: Linux x64 4.19.12-arch1-1-ARCH发布于 2019-01-07 23:41:52
当您让Python运行您的hello.py时,PVSC使用终端运行python proj/main/hello.py。对于Python来说,这与从python hello.py目录中运行proj/main一样,这意味着解释器甚至看不到包含hello.py的包(因此它没有proj.util的概念)。
没有使用.env文件,因为该文件再次只是终端中的直接执行,并且您的终端或Python都不读取.env文件。但是当您使用调试器时,我们可以指定一些细节,比如使用您的.env文件,以及为什么调试器会像您期望的那样设置PYTHONPATH。
发布于 2019-04-30 22:09:10
只需将这些行添加到要执行的文件的顶部即可。
if __name__ == "__main__":
import os
import sys
sys.path.append(os.getcwd())这些脚本在直接执行
__name__ == "__main__"时将目录where文件添加到路径中。
发布于 2020-08-04 19:22:59
TLDR:使用正确的PYTHONPATH启动VS代码
我的设置:在切换到项目目录时,用direnv (https://direnv.net/)自动从.env设置特定于项目的PYTHONPATH。这还设置了项目所需的虚拟环境。从命令行开始VS代码,以便使用正确的环境变量。
您可以创建一个shell脚本,设置正确的环境变量,并启动VS代码。
免责声明:我在包中使用绝对导入,这不是用相对导入测试的。
https://stackoverflow.com/questions/54063050
复制相似问题