【问题标题】:Adding Python package to path for VSCode terminal将 Python 包添加到 VSCode 终端的路径
【发布时间】:2019-11-05 10:45:49
【问题描述】:

我正在使用 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 没有添加到其中。我不想每次打开不同的 Workspace 时都必须添加/更改系统 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 并运行它,但我真的只想在我正在处理的课程中运行 doctest,而不是每次都运行所有测试(并且翻到另一个文件来做)。

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

有什么想法吗?

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

【问题讨论】:

    标签: python python-3.x visual-studio-code doctest


    【解决方案1】:

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

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

    "terminal.integrated.env.windows": {"PYTHONPATH": "C:\\MyPython"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多