英文原文:https://code.visualstudio.com/docs/python/environments
Python 中的“环境”是 Python 程序运行的上下文,由解释器和任意数量的已安装包组成。
注意:如果您想更熟悉 Python 编程语言,请查看更多 Python 资源。
Python 环境的类型
· 全局环境
默认情况下,安装的任何 Python 解释器都在其自己的全局环境中运行。例如,如果您只是在新终端上运行 python、python3 或 py(取决于您安装 Python 的方式),那么您将在该解释器的全局环境中运行。您安装或卸载的任何软件包都会影响全局环境以及您在其中运行的所有程序。
提示:在 Python 中,最佳实践是创建特定于工作区的环境,例如使用本地环境。
· 本地环境
您可以为工作区创建两种类型的环境: virtual 和 conda。这些环境允许您在不影响其他环境的情况下安装软件包,从而隔离工作区的软件包安装。
虚拟环境
虚拟环境是创建环境的内置方式。虚拟环境创建一个文件夹,其中包含特定解释器的副本(或符号链接)。当您将软件包安装到虚拟环境中时,它将最终位于这个新文件夹中,从而与其他工作区使用的其他软件包隔离。
注意:虽然可以将虚拟环境文件夹作为工作区打开,但不建议这样做,并且可能会导致使用 Python 扩展时出现问题。
conda 环境
conda 环境是使用 conda 包管理器进行管理的 Python 环境(请参阅 conda 入门)。在 conda 和虚拟环境之间进行选择取决于您的打包需求、团队标准等。
Python环境工具
下表列出了Python环境涉及的各种工具:
工具 | 定义和目的 |
pip | 用于安装和更新包的 Python 包管理器。默认情况下,它随 Python 3.9+ 一起安装(除非您使用的是基于 Debian 的操作系统;在这种情况下安装 python3-pip)。 |
venv | 允许您管理不同项目的单独软件包安装,并且默认随 Python 3 一起安装(除非您使用基于 Debian 的操作系统;在这种情况下安装 python3-venv) |
conda | 与 Miniconda 一起安装。它可用于管理包和虚拟环境。通常用于数据科学项目。 |
创建环境
· 使用创建环境命令
要使用虚拟环境或 Anaconda 在 VS Code 中创建本地环境,可以按照以下步骤操作:打开命令面板 (Ctrl+Shift+P),搜索 Python: Create Environment 命令,然后选择它
该命令显示环境类型列表:Venv 或 Conda。
如果您使用 Venv 创建环境,该命令会显示可用作新虚拟环境基础的解释器列表。
如果您使用 Conda 创建环境,该命令会显示可用于您的项目的 Python 版本列表。
选择所需的解释器或 Python 版本后,将显示一条通知,显示环境创建的进度,并且环境文件夹将出现在您的工作区中。
注意:该命令还将安装需求/依赖项文件中列出的必要包,例如位于项目文件夹中的requirements.txt、pyproject.toml 或environment.yml。它还会将 .gitignore 文件添加到虚拟环境中,以帮助防止您意外地将虚拟环境提交到源代码管理。
· 在终端中创建虚拟环境
如果您选择手动创建虚拟环境,请使用以下命令(其中“.venv”是环境文件夹的名称):
# macOS/Linux
# You may need to run `sudo apt-get install python3-venv` first on Debian-based OSs
python3 -m venv .venv
# Windows
# You can also use `py -3 -m venv .venv`
python -m venv .venv
注意:要了解有关 venv 模块的更多信息,请阅读 Python.org 上的虚拟环境的创建。
当您创建新的虚拟环境时,VS Code 中将显示提示,允许您为工作区选择它。
提示:请确保更新源代码管理设置,以防止意外提交虚拟环境(例如 .gitignore)。由于虚拟环境不可移植,因此将它们提交给其他人使用通常没有意义。
在终端创建conda环境
Python 扩展会自动检测现有的 conda 环境。我们建议您在 conda 环境中安装 Python 解释器,否则在您选择环境后会为您安装一个解释器。例如,以下命令创建一个名为 env-01 的 conda 环境,其中包含 Python 3.9 解释器和多个库:
conda create -n env-01 python=3.9 scipy=0.15.0 numpy
注意:有关 conda 命令行的更多信息,您可以阅读 Conda 环境。
补充笔记:
- 如果在 VS Code 运行时创建新的 conda 环境,请使用 Python: Select Interpreter 窗口右上角的刷新图标;否则你可能找不到那里的环境。
- 为了确保从 shell 角度正确设置环境,请使用 Anaconda 提示符并激活所需的环境。然后,您可以通过输入 “code . ”命令 来启动 VS Code。 VS Code 打开后,您可以使用命令面板或单击状态栏来选择解释器。
- 尽管 VS Code 的 Python 扩展目前没有与 condaenvironment.yml 文件直接集成,但 VS Code 本身是一个很棒的 YAML 编辑器。
- 如果默认 shell 设置为 PowerShell,则无法在 VS Code 集成终端中自动激活 Conda 环境。要更改 shell,请参阅集成终端 - 终端配置文件。
- 您可以手动指定用于激活的 conda 可执行文件的路径(版本 4.4+)。为此,请打开命令面板 (Ctrl+Shift+P) 并运行首选项:打开用户设置。然后设置python.condaPath,它位于用户设置的Python扩展部分,具有适当的路径。
使用 Python 解释器
· 选择并激活环境
Python 扩展尝试查找并选择它认为最适合工作区的环境。如果您希望选择特定环境,请使用“Python: Select Interpreter” 命令 (Ctrl+Shift+P)。
注意:如果 Python 扩展找不到解释器,它会发出警告。在 macOS 12.2 及更早版本上,如果您使用操作系统安装的 Python 解释器,该扩展还会发出警告,因为已知它存在兼容性问题。无论哪种情况,您都可以通过在用户设置中将 python.disableInstallationCheck 设置为 true 来禁用这些警告。
Python:选择解释器命令显示可用全局环境、conda 环境和虚拟环境的列表。 (有关详细信息,请参阅扩展在何处查找环境部分,包括这些类型的环境之间的区别。)例如,下图显示了多个 Anaconda 和 CPython 安装以及 conda 环境和位于的虚拟环境 (env)在工作区文件夹中:
注意:在 Windows 上,VS Code 可能需要一些时间来检测可用的 conda 环境。在此过程中,您可能会在环境路径之前看到“(缓存)”。该标签指示 VS Code 目前正在使用该环境的缓存信息。
如果您在 VS Code 中打开了一个文件夹或工作区,并且从列表中选择了一个解释器,则 Python 扩展将在内部存储该信息。这可确保您重新打开工作区时将使用相同的解释器。
Python 扩展使用选定的环境来运行 Python 代码(使用 Python:在终端中运行 Python 文件命令),当您拥有 .py 时提供语言服务(自动完成、语法检查、linting、格式化等)在编辑器中打开文件,然后使用“终端:创建新终端”命令打开终端。在后一种情况下,VS Code 会自动激活选定的环境。
提示:要防止自动激活选定的环境,请将 “python.terminal.activateEnvironment”: false 添加到您的 settings.json 文件中(它可以作为现有设置的同级文件放置在任何位置)。
提示:如果 activate 命令生成消息“Activate.ps1 未经过数字签名。您无法在当前系统上运行此脚本。”,则您需要临时更改 PowerShell 执行策略以允许脚本运行(请参阅关于执行策略在 PowerShell 文档中):Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
注意:默认情况下,VS Code 在调试代码时使用为工作区选择的解释器。您可以通过在调试配置的 python 属性中指定不同的路径来覆盖此行为。请参阅选择调试环境。
所选的解释器版本将显示在状态栏的右侧。
当未选择任何解释器时,状态栏也会有所反映。
无论哪种情况,单击状态栏的此区域都是Python的方便快捷方式:Select Interpreter命令。
提示:如果您在 VS Code 识别虚拟环境时遇到任何问题,请提出问题,以便我们帮助确定原因。
手动指定解释器
如果 VS Code 没有自动找到您要使用的解释器,您可以浏览文件系统上的解释器或手动提供其路径。
您可以通过运行 Python:选择解释器命令并选择显示在解释器列表顶部的输入解释器路径…选项来执行此操作:
然后,您可以直接在文本框中输入 Python 解释器的完整路径(例如“.venv/Scripts/python.exe”),也可以选择“查找…”按钮并浏览文件系统以查找您想要选择的 python 可执行文件。
如果要手动指定首次打开工作区时使用的默认解释器,可以创建或修改 python.defaultInterpreterPath 设置的条目。
注意:在为工作区选择解释器后,不会应用对 python.defaultInterpreterPath 设置的更改;一旦为工作区选择了初始解释器,对设置的任何更改都将被忽略。
此外,如果您想为所有 Python 应用程序设置默认解释器,您可以在用户设置中手动添加 python.defaultInterpreterPath 条目。为此,请打开命令面板 (Ctrl+Shift+P) 并输入首选项:打开用户设置。然后使用适当的解释器设置 python.defaultInterpreterPath(位于用户设置的 Python 扩展部分)
扩展如何自动选择环境
如果未指定解释器,则 Python 扩展会按以下优先级顺序自动选择最高版本的解释器:
- 虚拟环境直接位于工作区文件夹下。
- 虚拟环境与工作空间相关,但全局存储。例如,位于工作区文件夹外部的 Pipenv 或 Poetry 环境。
- 全局安装的解释器。例如,在/usr/local/bin、C:\python38等中找到的。
注意:所选的解释器可能与终端中 python 所指的不同。
如果 Visual Studio Code 没有自动找到您的解释器,您可以手动指定解释器。
扩展在哪里寻找环境
该扩展程序会自动在以下位置查找解释器(无特定顺序):
- 标准安装路径,例如 /usr/local/bin、/usr/sbin、/sbin、c:\python36 等。
- 虚拟环境直接位于工作区(项目)文件夹下。
- 虚拟环境位于由 python.venvPath 设置标识的文件夹中(请参阅常规 Python 设置),其中可以包含多个虚拟环境。该扩展在 venvPath 的第一级子文件夹中查找虚拟环境。
- 虚拟环境位于 virtualenvwrapper 的 ~/.virtualenvs 文件夹中。
- 由 pyenv、Pipenv 和 Poetry 创建的解释器。
- 虚拟环境位于 WORKON_HOME 标识的路径中(由 virtualenvwrapper 使用)。
- 通过 conda env list 找到的 Conda 环境。没有解释器的 Conda 环境将根据选择为其安装一个解释器。
- 解释器安装在工作区文件夹下 direnv 的 .direnv 文件夹中。
环境和终端窗口
使用“Python: Select Interpreter”后,右键单击文件并选择“Python: Run Python File in Terminal”时将应用该解释器。当您使用“Terminal: Create New Terminal”命令时,环境也会自动激活,除非您将 python.terminal.activateEnvironment 设置更改为 false。
请注意,从激活了特定 Python 环境的 shell 启动 VS Code 不会自动在默认集成终端中激活该环境。
注意:如果将 PowerShell 设置为集成 shell,则无法在集成终端中自动激活 conda 环境。有关如何更改 shell 的信息,请参阅集成终端 - 终端配置文件。
使用Python更改解释器:SELECT解释器命令不会影响已经打开的终端面板。因此,您可以在拆分终端中激活单独的环境:选择第一个解释器,为其创建终端,选择其他解释器,然后在终端标题栏中使用拆分按钮(Ctrl+Shift+5)。
选择调试环境
默认情况下,调试器将使用通过 Python 扩展选择的 Python 解释器。但是,如果在 launch.json 的调试配置中指定了 python 属性,则该属性优先。如果未定义此属性,它将回退到使用为工作区选择的 Python 解释器路径。
环境变量
环境变量定义文件
环境变量定义文件是一个包含键值对的文本文件,格式为environment_variable=value,其中#用于注释。不支持多行值,但允许引用先前定义的环境变量。环境变量定义文件可用于调试和工具执行(包括 linter、格式化程序、IntelliSense 和测试工具)等场景,但不应用于终端。
注意:环境变量定义文件不一定是跨平台的。例如,Unix 使用 : 作为环境变量中的路径分隔符,而 Windows 使用 ;。此类操作系统差异没有标准化,因此您需要确保任何环境定义文件使用与您的操作系统兼容的值。
默认情况下,Python 扩展在当前工作区文件夹中查找并加载名为 .env 的文件,然后应用这些定义。该文件由用户设置中的默认条目“python.envFile”:“${workspaceFolder}/.env”标识(请参阅常规 Python 设置)。您可以随时更改 python.envFile 设置以使用不同的定义文件。
注意:环境变量定义文件并不在所有可以使用环境变量的情况下使用。除非 Visual Studio Code 文档另有说明,否则这些仅影响其定义的某些场景。例如,扩展在解析设置值时不使用环境变量定义文件。
调试配置还包含一个 envFile 属性,该属性也默认为当前工作区中的 .env 文件(请参阅调试 - 设置配置选项)。此属性允许您轻松设置用于调试目的的变量,以替换默认 .env 文件中指定的变量。
例如,在开发 Web 应用程序时,您可能希望在开发服务器和生产服务器之间轻松切换。您可以为每个 URL 和其他设置使用单独的定义文件,而不是直接将不同的 URL 和其他设置编码到应用程序中。例如:
dev.env 文件
# dev.env - development configuration
# API endpoint
MYPROJECT_APIENDPOINT=https://my.domain.com/api/dev/
# Variables for the database
MYPROJECT_DBURL=https://my.domain.com/db/dev
MYPROJECT_DBUSER=devadmin
MYPROJECT_DBPASSWORD=!dfka**213=
prod.env 文件
# prod.env - production configuration
# API endpoint
MYPROJECT_APIENDPOINT=https://my.domain.com/api/
# Variables for the database
MYPROJECT_DBURL=https://my.domain.com/db/
MYPROJECT_DBUSER=coreuser
MYPROJECT_DBPASSWORD=kKKfa98*11@
然后,您可以将 python.envFile 设置设置为 ${workspaceFolder}/prod.env,然后将调试配置中的 envFile 属性设置为 ${workspaceFolder}/dev.env。
注意:当使用多种方法指定环境变量时,请注意存在优先顺序。 launch.json 文件中定义的所有 env 变量都将覆盖 .env 文件中包含的变量,这些变量由 python.envFile 设置(用户或工作区)指定。同样,launch.json 文件中定义的 env 变量将覆盖 launch.json 中指定的 envFile 中定义的环境变量
PYTHONPATH 变量的使用
PYTHONPATH 环境变量指定 Python 解释器应在其中查找模块的其他位置。在 VS Code 中,可以通过终端设置 (terminal.integrated.env.*) 和/或在 .env 文件中设置 PYTHONPATH。
使用终端设置时,PYTHONPATH 会影响用户在终端内运行的任何工具,以及扩展通过终端路由为用户执行的任何操作(例如调试)。但是,在这种情况下,当扩展执行不通过终端路由的操作(例如使用 linter 或格式化程序)时,此设置不会对模块查找产生影响。