-1

我正在使用 VScode 在包中编写 python 类。我想在使用 VScode 终端时将此包的父目录添加到 Python 路径,以便我可以使用import该包(无论正在运行的文件的目录如何)。

我尝试了.env文件和工作区设置但没有成功。

最终我想使用终端在类上运行文档测试,为此终端需要能够导入包。

.env 文件

我有一个工作区。我首先尝试.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:\MyPythonsys.pathimport Pkg.Class1

但是,如果我运行Class2.py(包括import Pkg.Class1在代码和 doctest 中)然后目录C:\MyPython\Pkg被添加到sys.path并且它无法找到并导入Pkg包并且doctest失败。

C:\MyPython因此,无论正在运行的文件的目录如何,我都想添加到 python 路径。

当然,我可以将所有测试添加到test.py并运行它,但我真的只想在我正在处理的类中运行 doctest,而不是每次都运行所有测试(并翻转到另一个文件来做它)。

看起来这应该很容易,但我无法让它工作!

有任何想法吗?

PS:我没有包含测试或类的 .py 代码,因为它与问题无关,它import是失败的。最终我可以看到所需的目录既不在sys.path也不出现os.environ.get('PYTHONPATH'),这就是导入失败的原因。

4

1 回答 1

0

所以有两件事。第一,Python 不是为您执行包中包含的文件而设计的,因此您在尝试使其工作时在某种程度上违背了它的设计。最好做一些事情,比如使用 Python 的-m标志来做你想做的事情,例如python -m Pkg.Class2. 这样您就不必操纵路径来运行包中包含的模块。

第二,您非常接近您的设置,但您不小心使用了字符串而不是对象来指定终端的环境变量。你想要的是:

"terminal.integrated.env.windows": {"PYTHONPATH": "C:\\MyPython"}
于 2019-11-05T22:53:42.817 回答