如何在VisualStudio代码中为我的工作区正确设置$PYTHONPATH
变量?
背景信息
我已经安装了两个版本的GNURadio:
/usr/lib/python2.7/dist-packages/gnuradio
中安装的GNURadio版本3.7.11。
PyBOMBS在/home/tejul/Documents/gr13/default/lib/python2.7/dist-packages/gnuradio
中安装了GNURadio版本3.7.13.4(我的前缀目录为~/Documents/gr13/default
)
只有在运行setup_env.sh
脚本(除其他功能外,/home/tejul/Documents/gr13/default/lib/python2.7/dist-packages
添加到$PYTHONPATH
)中然后才能在其中运行python,我才能使用GNURadio的较新版本。终端
tejul@Wacom:~/Documents/gr13/default$ ls
bin etc include lib libexec setup_env.sh share src
tejul@Wacom:~/Documents/gr13/default$ source ./setup_env.sh
tejul@Wacom:~/Documents/gr13/default$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from gnuradio import gr
>>> gr.version()
'3.7.13.4'
>>>
自然不用修改$ PYTHONPATH python即可导入旧版本的GNURadio。
我想在VisualStudio Code中为新版本的GNURadio编写,运行和调试python脚本。我一直在尝试为VSCode选择python interpreters,workspaces和environments。
据我了解,请勿将VSCode工作空间设置python.pythonPath
与环境变量$PYTHONPATH
混淆。 python.pythonPath
是用于调试或运行代码的 python解释器的路径,而$PYTHONPATH
是python用于搜索模块。
PyBOMBS似乎没有在我的前缀目录中安装自己的python解释器。因此,我需要将VSCode与位于/usr/bin/python2.7
中的普通python解释器一起使用。因此,重新定义VSCode的python.pythonPath
或选择其他python解释器对我没有帮助。
我需要让VSCode使用我自己的环境变量版本$PYTHONPATH
,该变量将告诉我的常规python解释器最好从/home/tejul/Documents/gr13/default/lib/python2.7/dist-packages
导入模块。
问题
在documentation之后,我在工作区目录中创建了自己的.env
文件,该文件为python应该从中导入模块的位置设置了优先顺序。 ,,它对python解释器没有影响。
您能看到我在做什么错吗?我也尝试过:
/home/tejul/Documents/gr13/default/lib/python2.7
,这无济于事$PYTHONPATH
而不是PYTHONPATH
,这没有帮助.env
文件每次更改后重新启动VSCode,这无济于事PYTHONPATH="/home/tejul/Documents/gr13/default/lib/python2.7:/usr/lib/python2.7"
,这没有帮助答案 0 :(得分:31)
我有一种情况,我认为是相对普遍的。我希望脚本从另一个目录导入模块。我的python项目的布局如下:
~/project/
|
|---modules/
|
|---mod.py
|---scripts/
|---script.py
在script.py
中,我有from modules import mod
。因此,我的PYTHONPATH
需要设置为~/project/
(PyCharm会自动执行该操作)。
VSCode是一个很棒的编辑器,但是在我看来,它在其他地方都达不到。这是一个完美的例子。
我创建了一个默认的launch.json
文件来“运行当前文件”。必须添加"cwd": "${fileDirname}"
行以使事情像在PyCharm中一样工作(FYI,可以在here中找到内置变量的列表)。
对于调试(侧栏上的“播放”按钮或F5键),在PYTHONPATH
或您的launch.json
文件中设置的.env
生效。请注意,在.env
文件中,不能使用诸如${workspaceRoot}
之类的变量,但是可以使用适合您平台的适当分隔符(对于Windows和Windows,;
:
给其他人。
因为我想利用该变量,所以将其放在我的launch.json
中:
"env": {"PYTHONPATH": "${workspaceFolder}:${env:PYTHONPATH}"}
看来您可以在环境中继承/添加任何内容(settings.json
并不适用;请参见下文)。
这也适用于热键Ctrl + F5(无需调试即可运行)。
作为参考,这是完整的文件,该文件复制了PyCharm自动执行的操作:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"cwd": "${fileDirname}",
"env": {"PYTHONPATH": "${workspaceFolder}:${env:PYTHONPATH}"}
}
]
}
如果我点击了显示在编辑器窗口右上角的“播放”按钮(当python文件为活动标签时),它将无法使用。这将在终端中运行当前文件,而根本不注意launch.json
。为此,您必须通过添加以下内容在PYTHONPATH
文件中定义settings.json
:
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
(请注意,每个平台都有不同的值。)如果您选择了python解释器(例如,从虚拟环境中),则settings.json
目录中将已经有一个.vscode
文件。我的看起来像这样:
{
"python.pythonPath": "/Users/me/project/venv/bin/python3",
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
}
您无法通过PYTHONPATH
文件将值附加或插入到继承的settings.json
中。它只需要一个字符串,并且不会解析分隔符。因此,即使您可以使用${env:PYTHONPATH}
来获得价值,您也将无法对其进行任何操作。
此外,您无法设置当前工作目录。即使您似乎可以使用"terminal.integrated.cwd": "${workspaceFolder}"
进行设置,也无法使用。因此,如果您的任何脚本使用相对于它们在树中位置的路径执行任何操作,则它们将无法工作。工作目录将成为您的项目根目录。
请注意,settings.json
文件的任何更改都将要求您退出集成终端并重新启动。
对于launch.json
,我对PYTHONPATH
所做的任何操作都与pylint
没有任何区别,尽管我可以将光标放在{{ 1}},然后按F12键,文件将打开。窥探棉绒设置,from modules import mod
的默认值包括mod
。要使用pylint复制此行为,请将其添加到您的mypy
:
--ignore-missing-imports
很遗憾,我们只需要解决此问题,但是在编写导入语句开始时,自动完成功能会很有帮助。
VSCode有很多层次,很难使所有东西协同工作。似乎有多种环境在浮动。最后:
settings.json
设置 "python.linting.pylintArgs": [
"--disable=F0401"
]
,因为它在与集成终端不同的环境中运行,并且不受PYTHONPATH
的控制,因此我只能告诉pylint
忽略导入错误。launch.json
文件或在pylint
中设置PYTHONPATH
,则可以使用F5运行答案 1 :(得分:4)
对于像 Pyright 这样的工具,您可以在工作区 settings.json 中编辑 python.analysis.extraPaths
。
示例:
{
...
"python.analysis.extraPaths": [
"src/apps",
"src/override_apps"
],
...
// next lines can be different
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.mypyEnabled": false,
"python.pythonPath": "environment/bin/python",
...
}
答案 2 :(得分:3)
这个问题值得批评,因为文档缺少一些重要的细节。
示例
假设您的项目布局是这样
myproject/
.vscode/
settings.json
.env
src/
a_module.py
tests/
test_a.py
打开settings.json文件并插入这些行
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder}/src;${workspaceFolder}/tests"
},
"python.envFile": "${workspaceFolder}/.env",
请注意,${workspaceFolder}
的计算结果为myproject
,而不是.vscode
文件夹。
在.env文件中输入
WORKSPACE_FOLDER=C:/full/path/to/myproject
PYTHONPATH=${WORKSPACE_FOLDER}/src;${WORKSPACE_FOLDER}/tests
请注意,在Windows上,路径中的斜杠向前倾斜,例如/
。不同路径用;
分隔(在其他平台上则用:
)。
2 step process很有帮助。
答案 3 :(得分:2)
OP似乎询问了.env文件的路径语法和设置的vscode,以便它查找和读取一些自定义模块文件。我的问题类似,因为我想让代码找到要在脚本中导入的自定义模块。我不想将自定义模块放在python环境中的文件夹中。我还想避免在Windows环境变量中将一个或多个路径设置为用户变量的PYTHONPATH-但这可以工作。 我正在Windows 10中的vscode中工作。
1)语法:
a)我发现以下路径语法在env文件中有效:
PYTHONPATH = C:/ 0APPS / PYTHON / _MODULES
我的.py模块文件位于此文件夹中。
b)#适用于.env文件中的注释。
2)VSCODE设置:我发现以下工作有效:
a)就像sunew在#2所说的那样我的设置:使用vscode中的Explorer在您选择的项目工作区文件夹中打开。对我来说是Q:\ 420 PYTHON
b)给env文件起一个名称,例如vscode.env文件,并将其放在工作区顶层的该文件夹中。
c)打开vscode设置并搜索.env,在“扩展”>“ Python”下,您会找到“ Python:env文件”。编辑该框以在.env之前添加您的env文件名。 例如$ {workspaceFolder} /vscode.env
d)导入custom_modulename现在对我有用-在python交互式窗口和脚本中。
答案 4 :(得分:1)
在.env中设置PYTHONPATH对我有用。 请注意,效果只是针对vscode及其运行的工具,例如pylint。
我的情况: 我有一个不是pip可安装软件包的项目,而只是一个源文件夹。 (出于历史原因...)
myproject/src
该项目具有在pip需求文件中定义的依赖项。
我的设置:
myproject
中打开vscode-因此它成为vscode“项目”的根。PYTHONPATH=./src:${PYTHONPATH}
答案 5 :(得分:1)
我花了很长时间弄清楚的另外两个问题(尽管上面的答案很好)可能会帮助其他人:
答案 6 :(得分:1)
在你的 vs 代码工作区文件夹中编辑 settings.json
{
"python.pythonPath": "*python package path*",
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder}/*sub folder*;*python package path*"
},
"python.defaultInterpreterPath": "*path to python exe*",
"python.analysis.extraPaths": [
"*python package path*",
"*python package path*"
],
"python.autoComplete.extraPaths": [
"*python package path*",
"*python package path*"
]}
效果很好!
答案 7 :(得分:1)
我也有一个类似的问题,我通过 ssh 在远程服务器上使用 vs-code,服务器有多个用户帐户,所以典型的 ubuntu python 路径对我不起作用。
我发现进行调试的最简单方法是首先使用“which python”找出我自己的python安装位置。输出将类似于“/home/user_name/anaconda3/bin/python”。
然后在vs-code中,我手动将python解释器的位置设置为上面的位置。我通过单击 vs 代码底部的 python 选项卡来做到这一点。 like the Python 3.8.5 64-bit in this picture. 这将打开命令面板,询问 python 解释器的位置,如下图所示。 manually put the location of python install here. 完成所有这些步骤后,我的python调试工作顺利。
答案 8 :(得分:0)
Linux用户在这里。我无法使其正常工作,并且与其他vscode Python扩展设置存在很多交互,但是以下对我有用:
关闭所有工作区。
添加一个您希望成为新工作空间的根文件夹的文件夹。
将包含PYTHONPATH=/path/to/a:/path/to/b
的.env文件放在一行上。请勿在值周围使用双引号。
重新启动vscode
创建一个test.py脚本,将其导入文件夹中的包或模块
vscode应该允许您的import
语句,并且应该自动完成以在您的文件夹中进行编码。