我正在使用VScode在软件包中编写python类。我想在使用VScode终端时将此程序包的父目录添加到Python路径,以便可以import
程序包(与正在运行的文件的目录无关)。
我尝试了.env
文件和工作区设置,但没有成功。
最终,我想使用终端在类上运行doctest,为此,终端需要能够导入软件包。
我有一个工作区。我首先尝试如下添加.env
文件(请注意,我在 Windows 上使用的是Python 3 Anaconda):
PYTHONPATH=C:\\MyPython;${PYTHONPATH}
(我尝试过使用单斜杠和双反斜杠和正斜杠,没有任何效果)。
当我在包含此脚本的终端中运行脚本(test.py
)
print(os.environ.get('PYTHONPATH'))
我刚回到None
。
我确实尝试在Windows中设置系统范围的PYTHONPATH环境变量,然后显示该变量,但未将C:\ MyPython添加到其中。我不需要每次打开其他工作区时都必须添加/更改系统PYTHONPATH!
然后我尝试在 MyProject.code-workspace
文件中添加工作区设置:
{
"folders": [
{
"path": "C:\\MyPython"
}
],
"settings": {
"terminal.integrated.cwd": "C:\\MyPython",
"terminal.integrated.env.windows": "C:\\MyPython"
}
}
同样,这没有用。
我的文件结构如下:
C:\MyPython
.env
MyProject.code-workspace
test.py
Pkg\
__init__.py
Class1.py
Class2.py
如果我使用绿色三角形按钮(“在Python终端中运行文件”)运行test.py
,则该文件的目录(C:\MyPython
)被添加到sys.path
中,并且一切正常(例如import Pkg.Class1
有效)。
但是,如果我运行Class2.py
(在代码和doctest中包含import Pkg.Class1
),则目录C:\MyPython\Pkg
被添加到sys.path
,并且找不到和导入Pkg
程序包,而doctest
失败。
因此,我想将C:\MyPython
添加到python路径中,而不管所运行文件的目录如何。
当然,我可以将所有测试添加到test.py
并运行它,但是我真的只想在我正在研究的类中运行doctests,而不是每次都运行所有测试(然后翻转到另一个文件即可)。
这似乎应该很容易,但是我无法使其正常工作!
有什么想法吗?
PS:我没有为测试或类添加.py代码,因为它与问题无关,是import
失败了。最终,我看到所需的目录没有出现在sys.path
和os.environ.get('PYTHONPATH')
中,这就是导入失败的原因。
答案 0 :(得分:0)
有两件事。第一,Python并不是为您执行包中包含的文件而设计的,因此您在尝试使其工作方面与它的设计有些抵触。最好执行类似的操作,例如使用Python的-m
标志来执行所需的操作,例如python -m Pkg.Class2
。这样,您无需操纵路径即可运行软件包中包含的模块。
二,您的设置非常接近您的需求,但是您不小心使用了字符串而不是对象来为终端指定环境变量。您想要的是:
"terminal.integrated.env.windows": {"PYTHONPATH": "C:\\MyPython"}
答案 1 :(得分:-1)
VScode终端与Windows终端相同,因此您可以手动添加它。 按winkey + S并键入“ env”,选择“编辑系统环境变量”。 选择“环境变量”。在用户和系统上都编辑名为“ path”的变量。 输入您要添加的路径。 记得在编辑后重新启动所有终端。