如何为 Visual Studio 代码正确设置 PYTHONPATH
How to correctly set PYTHONPATH for Visual Studio Code
如何在 VisualStudio Code 中为我的工作区正确设置 $PYTHONPATH
变量?
背景信息
我已经安装了两个版本的 GNURadio:
GNURadio 版本 3.7.11 由 Linux Mint 包管理器安装在 /usr/lib/python2.7/dist-packages/gnuradio
PyBOMBS安装的GNURadio 3.7.13.4版本在/home/tejul/Documents/gr13/default/lib/python2.7/dist-packages/gnuradio
(我的前缀目录是~/Documents/gr13/default
)
只有在我 运行 setup_env.sh
脚本(除其他事项外,将 /home/tejul/Documents/gr13/default/lib/python2.7/dist-packages
添加到 $PYTHONPATH
之后,我才能使用较新版本的 GNURadio 版本) 然后在终端中启动 python
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 代码中为新版本的 GNURadio 编写、运行 和调试 python 脚本。我一直在努力理解 python interpreters, workspaces, and environments 对 VSCode 的选择。
据我了解,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 应从中导入模块的位置的优先顺序。 las,它对 python 解释器没有影响。
你能看出我在这里做错了什么吗?我也试过:
- 将 PYTHONPATH 设置为更高一级的文件夹,即
/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"
,这没有帮助
在 .env 中设置 PYTHONPATH 对我有用。
请注意,效果仅适用于 vscode 及其运行的工具,例如 pylint。
我的情况:
我有一个不是 pip 可安装包的项目,而只是一个源文件夹。 (由于历史原因...)
myproject/src
该项目具有在 pip 要求文件中定义的依赖项。
我的设置:
- 我创建了一个 virtualenv,并从 requires 文件中安装了包。
- 我在文件夹
myproject
中打开 vscode - 所以这成为 vscode "project". 的根目录
- 我指出 vscode 使用 virtualenv 作为 python 解释器。这将使使用 pip 安装的依赖项导入工作。 (对于 linters、intellisense 等)
- 为了从我的项目源代码导入 vscode 中的 linters(尤其是 pylint),我添加了一个包含此内容的 .env,将我的项目源文件夹添加到 PYTHONPATH:
PYTHONPATH=./src:${PYTHONPATH}
OP 似乎询问了 .env 文件的路径语法和 vscode 设置,以便它找到并读取一些自定义模块文件。我的问题是相似的,因为我希望代码找到我的自定义模块以在脚本中导入。我不想将我的自定义模块放在我的 python 环境中的文件夹中。我还想避免在 Windows 环境变量中将一个或多个路径设置为用户变量的 PYTHONPATH - 但如果您想这样做,这将起作用。
我在 vscode 工作 Windows 10.
1) 语法:
a) 我发现以下路径语法在 env 文件中有效:
PYTHON路径=C:/0APPS/PYTHON/_MODULES
我的 .py 模块文件在此文件夹中。
b) # 适用于 .env 文件中的注释。
2) VSCODE 设置:我发现以下内容有效:
a) 就像 sunew 在 #2 中所说的那样我的设置:使用 vscode 中的资源管理器在您选择的项目工作区文件夹中打开。对我来说就是 Q:\420 PYTHON
b) 为 env 文件命名,例如 vscode.env 文件,并将其放在工作区顶层的文件夹中。
c) 打开 vscode 设置并在 Extensions > Python 下搜索 .env,您会找到 "Python: env file"。编辑框以在 .env 之前添加您的 env 文件名。
例如${workspaceFolder}/vscode.env
d) import custom_modulename 现在对我有用 - 在 python 交互式 window 和脚本中。
这个问题值得赞成,因为文档缺少一些重要的细节。
例子
假设你的项目布局是这样的
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 上,路径中的斜线向前倾斜,就像 /
一样。不同的路径用 ;
分隔(在其他平台上用 :
)。
This blog 很有帮助。
我有一种情况,我认为比较普遍。我想要一个脚本从另一个目录导入模块。我的 python 项目布局如下:
~/project/
|
|---modules/
|
|---mod.py
|---scripts/
|---script.py
在script.py
,我有from modules import mod
。所以我的 PYTHONPATH
需要设置为 ~/project/
(PyCharm 自动执行的操作)。
VSCode 是一个很棒的编辑器,但在我看来,它在其他任何地方都不尽如人意。这是一个完美的例子。
我创建一个默认的 launch.json
文件到“运行 当前文件”。必须添加 "cwd": "${fileDirname}"
行以使事情像在 PyCharm 中那样工作(仅供参考,可以找到内置变量列表 here)。
调试
为了调试(边栏上的“播放”按钮,或 F5 键),launch.json
或您的 .env
文件中设置的 PYTHONPATH
生效。请注意,在 .env
文件中,您不能使用诸如 ${workspaceRoot}
之类的变量,但您可以通过使用适合您的平台的分隔符(;
for Windows 和 :
对于其他人)。
因为我想利用那个变量,所以我把它放在我的 launch.json
:
"env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"}
(感谢@someonr 建议使用 ${pathSeparator}
。)
看来您可以 prepend/append 从环境继承的任何东西(这对于 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}${pathSeparator}${env:PYTHONPATH}"}
}
]
}
运行 在终端
如果我点击编辑器 window 右上角的“播放”按钮(当 python 文件是活动选项卡时),它将不起作用。这 运行s 终端中的当前文件,根本不注意 launch.json
。要使其工作,您必须在 settings.json
文件中定义 PYTHONPATH
,方法是添加:
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
(请注意,每个平台都有不同的值。)如果您选择了 python 解释器(例如从虚拟环境中),您将在 .vscode
目录。我的看起来像这样:
{
"python.pythonPath": "/Users/me/project/venv/bin/python3",
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
}
您不能通过 settings.json
文件向继承的 PYTHONPATH
追加或插入值。它只会接受一个字符串,并且不会解析分隔符。因此,即使您可以使用 ${env:PYTHONPATH}
获取值,您也无法对其执行任何操作。
此外,您无法设置当前工作目录。尽管看起来您可以使用 "terminal.integrated.cwd": "${workspaceFolder}"
来设置它,但它不起作用。因此,如果您的任何脚本对相对于它们在树中的位置的路径进行任何操作,它们将无法工作。工作目录将是您的项目根目录。
请注意,对 settings.json
文件的任何更改都需要您退出集成终端并重新启动它。
林丁
我对 launch.json
所做的关于 PYTHONPATH
的任何事情对 pylint
没有任何影响,尽管我可以将光标放在 from modules import mod
上mod
,按 F12,文件打开。窥探 linting 设置,mypy
的默认值包括 --ignore-missing-imports
。要使用 pylint 复制此行为,请将其添加到您的 settings.json
:
"python.linting.pylintArgs": [
"--disable=F0401"
]
遗憾的是我们只需要解决这个问题,但是自动完成在开始编写导入语句时有很大帮助。
结论
VSCode 有很多层次,很难让它们协同工作。似乎有多种环境在四处漂浮。最后:
- 我不能“运行 在终端”,因为我不能将当前工作目录设置为包含当前文件的路径。
- 我无法为
pylint
设置 PYTHONPATH
,因为 运行 在某些不同于集成终端的环境中以及由 launch.json
控制的任何环境中,所以我只能告诉 pylint
忽略导入错误。
- 运行 如果您通过
.env
文件或 launch.json
设置 PYTHONPATH
,则 F5 有效
Linux 用户在这里。我很难让它工作,并且与其他 vscode Python 扩展设置有很多交互,但以下对我有用:
关闭所有工作区。
添加一个您希望作为新工作区根文件夹的文件夹。
将包含 PYTHONPATH=/path/to/a:/path/to/b
的 .env 文件单独放在一行中。不要在值周围使用双引号。
重启vscode
创建一个 test.py 脚本以在您的文件夹中导入包或模块
vscode 应该允许您的 import
语句,并且应该自动完成以在您的文件夹中编码。
另外两个我花了很长时间弄清楚的问题(尽管上面有很好的答案)可能对其他人有帮助:
- 确保您已将 VS Code 配置为允许终端
配置以修改您的 shell 设置(通过管理工作区
Shell 权限(参见
https://code.visualstudio.com/docs/editor/integrated-terminal#_configuration)。否则 VS Code 会默默地忽略你的
terminal.integrated.env.{平台}设置。
- Pylint 将仅在 worspace 目录中搜索其他模块,如果从中启动它的模块位于一个包文件夹中(即具有 _init_.py 文件)(参见 https://docs.pylint.org/en/1.6.0/run.html)意味着尽管代码 运行 由于配置如上的 VS 代码 launch.json 正确,pylint 将继续突出显示导入错误。
对于像 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",
...
}
在您的 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*"
]}
效果不错!
我也有类似的问题,我在远程服务器上通过 ssh 使用 vs-code,服务器有多个用户帐户,所以典型的 ubuntu python 路径不起作用对我来说。
我发现进行调试的最简单方法是首先使用“which python”找到我自己的 python 安装位置。输出类似于“/home/user_name/anaconda3/bin/python”。
然后在vs-code中,我手动将python解释器位置设置为上面的位置。我通过单击 vs code 底部的 python 选项卡来完成此操作。 like the Python 3.8.5 64-bit in this picture.
这将打开命令面板,询问 python 解释器的位置,如此图所示。 manually put the location of python install here.
完成所有这些步骤后,我的 python 调试工作顺利。
运行 VSCode 1.6.2,Python 扩展 v2021.10.1365161279 on Windows 10.
调试基于env文件,我使用默认文件.env
:
PYTHONPATH=<full_path_to_the_workspace_folder>
运行 基于具有这样设置的 .vscode/settings.json
文件工作
"terminal.integrated.env.windows": {"PYTHONPATH": "<full_path_to_the_workspace_folder>"}
只是我发现如果我更改了路径,我需要禁用+重新加载+启用扩展。
使用 VS Code,一个 pip 虚拟环境,你可以放在 .venv/bin/activate
文件的末尾:
export PYTHONPATH="${PYTHONPATH}:/path/to/your/package"
package -> module1 -> abc.py 你可以使用:import module.abc 等
这些是解决问题的 3 种不同方法:
1/ 编辑 PYTHONPATH
:
export PYTHONPATH=/Users/.../Projects/MyNewProject/src
python3 myfile.py
到 运行 文件
2/ 编辑 VSCode 设置:
- 在 VScode
中将 "terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}/src"}
添加到 settings.json
3/ 添加一个 setup.py 文件到你的 src/ 目录。
- 创建文件
src/setup.py
from setuptools import find_packages, setup
setup(
name="sample",
description="Sample Python Project",
packages=find_packages(),
)
- 运行
python -m pip install -e ./src/
将 src/ 中的所有模块作为包安装
如何在 VisualStudio Code 中为我的工作区正确设置 $PYTHONPATH
变量?
背景信息
我已经安装了两个版本的 GNURadio:
GNURadio 版本 3.7.11 由 Linux Mint 包管理器安装在
/usr/lib/python2.7/dist-packages/gnuradio
PyBOMBS安装的GNURadio 3.7.13.4版本在
/home/tejul/Documents/gr13/default/lib/python2.7/dist-packages/gnuradio
(我的前缀目录是~/Documents/gr13/default
)
只有在我 运行 setup_env.sh
脚本(除其他事项外,将 /home/tejul/Documents/gr13/default/lib/python2.7/dist-packages
添加到 $PYTHONPATH
之后,我才能使用较新版本的 GNURadio 版本) 然后在终端中启动 python
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 代码中为新版本的 GNURadio 编写、运行 和调试 python 脚本。我一直在努力理解 python interpreters, workspaces, and environments 对 VSCode 的选择。
据我了解,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 应从中导入模块的位置的优先顺序。 las,它对 python 解释器没有影响。
你能看出我在这里做错了什么吗?我也试过:
- 将 PYTHONPATH 设置为更高一级的文件夹,即
/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"
,这没有帮助
在 .env 中设置 PYTHONPATH 对我有用。 请注意,效果仅适用于 vscode 及其运行的工具,例如 pylint。
我的情况: 我有一个不是 pip 可安装包的项目,而只是一个源文件夹。 (由于历史原因...)
myproject/src
该项目具有在 pip 要求文件中定义的依赖项。
我的设置:
- 我创建了一个 virtualenv,并从 requires 文件中安装了包。
- 我在文件夹
myproject
中打开 vscode - 所以这成为 vscode "project". 的根目录
- 我指出 vscode 使用 virtualenv 作为 python 解释器。这将使使用 pip 安装的依赖项导入工作。 (对于 linters、intellisense 等)
- 为了从我的项目源代码导入 vscode 中的 linters(尤其是 pylint),我添加了一个包含此内容的 .env,将我的项目源文件夹添加到 PYTHONPATH:
PYTHONPATH=./src:${PYTHONPATH}
OP 似乎询问了 .env 文件的路径语法和 vscode 设置,以便它找到并读取一些自定义模块文件。我的问题是相似的,因为我希望代码找到我的自定义模块以在脚本中导入。我不想将我的自定义模块放在我的 python 环境中的文件夹中。我还想避免在 Windows 环境变量中将一个或多个路径设置为用户变量的 PYTHONPATH - 但如果您想这样做,这将起作用。 我在 vscode 工作 Windows 10.
1) 语法:
a) 我发现以下路径语法在 env 文件中有效:
PYTHON路径=C:/0APPS/PYTHON/_MODULES
我的 .py 模块文件在此文件夹中。
b) # 适用于 .env 文件中的注释。
2) VSCODE 设置:我发现以下内容有效:
a) 就像 sunew 在 #2 中所说的那样我的设置:使用 vscode 中的资源管理器在您选择的项目工作区文件夹中打开。对我来说就是 Q:\420 PYTHON
b) 为 env 文件命名,例如 vscode.env 文件,并将其放在工作区顶层的文件夹中。
c) 打开 vscode 设置并在 Extensions > Python 下搜索 .env,您会找到 "Python: env file"。编辑框以在 .env 之前添加您的 env 文件名。 例如${workspaceFolder}/vscode.env
d) import custom_modulename 现在对我有用 - 在 python 交互式 window 和脚本中。
这个问题值得赞成,因为文档缺少一些重要的细节。
例子
假设你的项目布局是这样的
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 上,路径中的斜线向前倾斜,就像 /
一样。不同的路径用 ;
分隔(在其他平台上用 :
)。
This blog 很有帮助。
我有一种情况,我认为比较普遍。我想要一个脚本从另一个目录导入模块。我的 python 项目布局如下:
~/project/
|
|---modules/
|
|---mod.py
|---scripts/
|---script.py
在script.py
,我有from modules import mod
。所以我的 PYTHONPATH
需要设置为 ~/project/
(PyCharm 自动执行的操作)。
VSCode 是一个很棒的编辑器,但在我看来,它在其他任何地方都不尽如人意。这是一个完美的例子。
我创建一个默认的 launch.json
文件到“运行 当前文件”。必须添加 "cwd": "${fileDirname}"
行以使事情像在 PyCharm 中那样工作(仅供参考,可以找到内置变量列表 here)。
调试
为了调试(边栏上的“播放”按钮,或 F5 键),launch.json
或您的 .env
文件中设置的 PYTHONPATH
生效。请注意,在 .env
文件中,您不能使用诸如 ${workspaceRoot}
之类的变量,但您可以通过使用适合您的平台的分隔符(;
for Windows 和 :
对于其他人)。
因为我想利用那个变量,所以我把它放在我的 launch.json
:
"env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"}
(感谢@someonr 建议使用 ${pathSeparator}
。)
看来您可以 prepend/append 从环境继承的任何东西(这对于 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}${pathSeparator}${env:PYTHONPATH}"}
}
]
}
运行 在终端
如果我点击编辑器 window 右上角的“播放”按钮(当 python 文件是活动选项卡时),它将不起作用。这 运行s 终端中的当前文件,根本不注意 launch.json
。要使其工作,您必须在 settings.json
文件中定义 PYTHONPATH
,方法是添加:
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
(请注意,每个平台都有不同的值。)如果您选择了 python 解释器(例如从虚拟环境中),您将在 .vscode
目录。我的看起来像这样:
{
"python.pythonPath": "/Users/me/project/venv/bin/python3",
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}"}
}
您不能通过 settings.json
文件向继承的 PYTHONPATH
追加或插入值。它只会接受一个字符串,并且不会解析分隔符。因此,即使您可以使用 ${env:PYTHONPATH}
获取值,您也无法对其执行任何操作。
此外,您无法设置当前工作目录。尽管看起来您可以使用 "terminal.integrated.cwd": "${workspaceFolder}"
来设置它,但它不起作用。因此,如果您的任何脚本对相对于它们在树中的位置的路径进行任何操作,它们将无法工作。工作目录将是您的项目根目录。
请注意,对 settings.json
文件的任何更改都需要您退出集成终端并重新启动它。
林丁
我对 launch.json
所做的关于 PYTHONPATH
的任何事情对 pylint
没有任何影响,尽管我可以将光标放在 from modules import mod
上mod
,按 F12,文件打开。窥探 linting 设置,mypy
的默认值包括 --ignore-missing-imports
。要使用 pylint 复制此行为,请将其添加到您的 settings.json
:
"python.linting.pylintArgs": [
"--disable=F0401"
]
遗憾的是我们只需要解决这个问题,但是自动完成在开始编写导入语句时有很大帮助。
结论
VSCode 有很多层次,很难让它们协同工作。似乎有多种环境在四处漂浮。最后:
- 我不能“运行 在终端”,因为我不能将当前工作目录设置为包含当前文件的路径。
- 我无法为
pylint
设置PYTHONPATH
,因为 运行 在某些不同于集成终端的环境中以及由launch.json
控制的任何环境中,所以我只能告诉pylint
忽略导入错误。 - 运行 如果您通过
.env
文件或launch.json
设置
PYTHONPATH
,则 F5 有效
Linux 用户在这里。我很难让它工作,并且与其他 vscode Python 扩展设置有很多交互,但以下对我有用:
关闭所有工作区。
添加一个您希望作为新工作区根文件夹的文件夹。
将包含
PYTHONPATH=/path/to/a:/path/to/b
的 .env 文件单独放在一行中。不要在值周围使用双引号。重启vscode
创建一个 test.py 脚本以在您的文件夹中导入包或模块
vscode 应该允许您的
import
语句,并且应该自动完成以在您的文件夹中编码。
另外两个我花了很长时间弄清楚的问题(尽管上面有很好的答案)可能对其他人有帮助:
- 确保您已将 VS Code 配置为允许终端 配置以修改您的 shell 设置(通过管理工作区 Shell 权限(参见 https://code.visualstudio.com/docs/editor/integrated-terminal#_configuration)。否则 VS Code 会默默地忽略你的 terminal.integrated.env.{平台}设置。
- Pylint 将仅在 worspace 目录中搜索其他模块,如果从中启动它的模块位于一个包文件夹中(即具有 _init_.py 文件)(参见 https://docs.pylint.org/en/1.6.0/run.html)意味着尽管代码 运行 由于配置如上的 VS 代码 launch.json 正确,pylint 将继续突出显示导入错误。
对于像 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",
...
}
在您的 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*"
]}
效果不错!
我也有类似的问题,我在远程服务器上通过 ssh 使用 vs-code,服务器有多个用户帐户,所以典型的 ubuntu python 路径不起作用对我来说。
我发现进行调试的最简单方法是首先使用“which python”找到我自己的 python 安装位置。输出类似于“/home/user_name/anaconda3/bin/python”。
然后在vs-code中,我手动将python解释器位置设置为上面的位置。我通过单击 vs code 底部的 python 选项卡来完成此操作。 like the Python 3.8.5 64-bit in this picture. 这将打开命令面板,询问 python 解释器的位置,如此图所示。 manually put the location of python install here. 完成所有这些步骤后,我的 python 调试工作顺利。
运行 VSCode 1.6.2,Python 扩展 v2021.10.1365161279 on Windows 10.
调试基于env文件,我使用默认文件.env
:
PYTHONPATH=<full_path_to_the_workspace_folder>
运行 基于具有这样设置的 .vscode/settings.json
文件工作
"terminal.integrated.env.windows": {"PYTHONPATH": "<full_path_to_the_workspace_folder>"}
只是我发现如果我更改了路径,我需要禁用+重新加载+启用扩展。
使用 VS Code,一个 pip 虚拟环境,你可以放在 .venv/bin/activate
文件的末尾:
export PYTHONPATH="${PYTHONPATH}:/path/to/your/package"
package -> module1 -> abc.py 你可以使用:import module.abc 等
这些是解决问题的 3 种不同方法:
1/ 编辑 PYTHONPATH
:
export PYTHONPATH=/Users/.../Projects/MyNewProject/src
python3 myfile.py
到 运行 文件
2/ 编辑 VSCode 设置:
- 在 VScode 中将
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}/src"}
添加到 settings.json
3/ 添加一个 setup.py 文件到你的 src/ 目录。
- 创建文件
src/setup.py
from setuptools import find_packages, setup
setup(
name="sample",
description="Sample Python Project",
packages=find_packages(),
)
- 运行
python -m pip install -e ./src/
将 src/ 中的所有模块作为包安装