因自己课程设计要求,需要制作一个管理系统,然而自己的解释器使用的是最原始的python39.exe
,自己使用pip
安装命令也是在源python程序所在位置将进行安装。这对项目包管理和环境依赖设计都是不利的。
因此需要在vscode中配置python虚拟环境。
Using Python environments in VS Code
本文讨论了 VS Code Python 扩展提供的用于处理 Python 环境的有用功能。 Python 中的“环境”是 Python 程序运行的上下文,由解释器和任意数量的已安装包组成。 读完本文后,您将对以下内容有一个很好的了解:
注意:如果您希望在 Visual Studio Code 中开始使用 Python,请参阅教程在 VS Code 中使用 Python。 如果您不熟悉 Python 语言,Python 教程 (Python.org) 也可能会有所帮助
默认情况下,您安装的任何 Python 解释器都在其自己的全局环境中运行,这并不特定于任何一个项目。例如,如果您只是在新的命令提示符下运行 python
(Windows) 或 python3
(macOS/Linux),那么您正在该解释器的全局环境中运行。因此,您安装或卸载的任何软件包都会影响全局环境以及您在该上下文中运行的所有程序。
尽管在全局环境中工作是一种简单的入门方法,但随着时间的推移,该环境会变得杂乱无章,其中包含您为不同项目安装的许多不同软件包。这种混乱使得针对一组具有已知版本的特定软件包彻底测试应用程序变得困难,这正是您在构建服务器或 Web 服务器上设置的那种环境。
出于这个原因,开发人员经常为项目创建一个虚拟环境。虚拟环境是项目中包含特定解释器副本的子文件夹。当您激活虚拟环境时,您安装的任何软件包仅安装在该环境的子文件夹中。然后,当您在该环境中运行 Python 程序时,您就会知道它仅针对那些特定的包运行。请注意,如果您没有使用虚拟环境,并且您安装了多个版本的 Python 并在路径环境变量中设置,您可能需要指定 Python 解释器以在终端中使用以将包安装到全局环境。
注意:虽然可以将虚拟环境文件夹作为工作区打开,但不建议这样做,并且可能会导致使用 Python 扩展时出现问题。
conda 环境是使用 conda
包管理器管理的 Python 环境(请参阅 conda 入门 (conda.io))。 Conda 可以很好地创建具有相互关联的依赖项以及二进制包的环境。与仅限于项目的虚拟环境不同,conda 环境可在任何给定计算机上全局使用。这种可用性使配置多个不同的 conda 环境变得容易,然后为任何给定项目选择合适的环境。
该扩展程序会自动在以下位置寻找解释器:
/usr/local/bin
、/usr/sbin
、/sbin
、c:\\python27
、c:\\python36
等。python.venvPath
设置标识的文件夹中的虚拟环境(请参阅常规设置),其中可以包含多个虚拟环境。该扩展在 venvPath
的第一级子文件夹中查找虚拟环境。~/.virtualenvs
文件夹中的虚拟环境。WORKON_HOME
标识的路径中的虚拟环境(由virtualenvwrapper 使用)。.direnv
文件夹中。如果 Visual Studio Code 没有自动定位,您也可以手动指定解释器。
注意:一旦“选择解释器”流程被触发,工作空间文件夹的 pipenv 环境将被搜索。如果找到,则不会搜索或列出其他解释器,因为 pipenv 希望管理所有方面。
该扩展程序还会加载由 python.envFile
设置标识的环境变量定义文件。此设置的默认值为 ${workspaceFolder}/.env
要创建虚拟环境,请使用以下命令,其中“.venv”是环境文件夹的名称:
# macOS/Linux
# You may need to run sudo apt-get install python3-venv first
python3 -m venv .venv
# Windows
# You can also use py -3 -m venv .venv
python -m venv .venv
注意:要了解有关
venv
模块的更多信息,请参阅 Python.org 上的创建虚拟环境。
创建新的虚拟环境时,将显示提示以允许您为工作区选择它。
这会将 Python 解释器的路径从新的虚拟环境添加到您的工作区设置。 然后在通过 Python 扩展安装包和运行代码时将使用该环境。 有关在项目中使用虚拟环境的示例,请参阅 Python、Django 和 Flask 教程。
提示:当您准备好将应用程序部署到其他计算机时,您可以使用命令
pip freeze > requirements.txt
(macOS/Linux 上的pip3
)创建一个requirements.txt
文件。 需求文件描述了您在虚拟环境中安装的软件包。 仅使用此文件,您或其他开发人员就可以使用pip install -r requirements.txt
(或在 macOS/Linux 上再次使用pip3
)恢复这些包。 通过使用需求文件,您无需将虚拟环境本身提交给源代码控制。
如果环境包含 Python 解释器,Python 扩展会自动检测现有的 conda 环境。 例如,以下命令使用 Python 3.4 解释器和几个库创建 conda 环境,然后 VS Code 将显示在可用解释器列表中:
conda create -n env-01 python=3.4 scipy=0.15.0 astroid babel
相反,如果您没有指定解释器,如 conda create --name env-00
,环境将不会出现在列表中。
有关 conda 命令行的更多信息,请参阅 Conda 环境 (conda.io)。
补充笔记:
shell
的角度很好地设置环境,一种选择是使用 Anaconda 提示符和激活的环境来使用code.
命令启动 VS Code。此时,您只需要使用命令面板或单击状态栏来选择解释器。conda environment.yml
文件直接集成,但 VS Code 本身是一个很棒的 YAML 编辑器。您可以手动指定用于激活的 conda 可执行文件的路径(版本 4.4+)。为此,请打开命令面板 (Ctrl+Shift+P
) 并输入首选项:打开用户设置。然后在用户设置的 Python 扩展部分设置 python.condaPath
,使用适当的路径。
默认情况下,Python 扩展会查找并使用它在系统路径中找到的第一个 Python 解释器。 要选择特定环境,请使用 Python:从命令面板 (Ctrl+Shift+P
) 中选择解释器命令。
注意:如果 Python 扩展找不到解释器,它会发出警告。 在 macOS 上,如果您使用的是操作系统安装的 Python 解释器,该扩展还会发出警告,因为您通常希望使用直接安装的解释器。 无论哪种情况,您都可以通过在用户设置中将
python.disableInstallationCheck
设置为true
来禁用这些警告。
您可以随时切换环境; 切换环境可帮助您根据需要使用不同的解释器或库版本测试项目的不同部分。
Python: Select Interpreter 命令显示可用全局环境、conda 环境和虚拟环境的列表。 (有关详细信息,请参阅扩展在何处查找环境部分,包括这些类型环境之间的区别。)例如,下图显示了多个 Anaconda 和 CPython 安装以及 conda 环境和位于的虚拟环境 (env
) 在工作区文件夹中:
注意:在 Windows 上,VS Code 可能需要一些时间来检测可用的 conda 环境。 在该过程中,您可能会在环境路径之前看到“(缓存)”。 该标签表示 VS Code 目前正在处理该环境的缓存信息。
从列表中选择一个解释器为 python.pythonPath
添加一个条目,其中包含工作区设置中解释器的路径。由于路径是工作区设置的一部分,因此无论何时打开该工作区,都应该已经选择了相同的环境。如果您想为您的应用程序设置默认解释器,您可以改为在您的用户设置中手动添加 python.pythonPath
条目。为此,请打开命令面板 (Ctrl+Shift+P
) 并输入首选项:打开用户设置。然后使用适当的解释器设置 python.pythonPath
,它位于用户设置的 Python 扩展部分。
Python 扩展使用选定的环境来运行 Python 代码(使用 **ython: Run Python File in Terminal **),在打开 .py
文件时提供语言服务(自动完成、语法检查、linting、格式化等)在编辑器中,然后使用 Terminal: Create New Integrated Terminal
命令打开一个终端。在后一种情况下,VS Code 会自动激活所选环境。
提示:要防止自动激活所选环境,请将
"python.terminal.activateEnvironment": false
添加到settings.json
文件中(它可以作为现有设置的同级放在任何地方)。
提示:如果激活命令生成消息“Activate.ps1 is not digitally signed. You cannot run this script on the current system.”,则需要临时更改 PowerShell 执行策略以允许脚本运行(请参阅关于执行策略 在 PowerShell 文档中):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
注意:默认情况下,VS Code 在调试代码时使用由
python.pythonPath
设置标识的解释器。 您可以通过在调试配置的pythonPath
属性中指定不同的路径来覆盖此行为。 请参阅选择调试环境。
状态栏始终显示当前的解释器。
状态栏也会反映何时没有选择解释器
无论哪种情况,单击状态栏的这个区域都是 Python 的便捷快捷方式:选择解释器命令。
提示:如果您在 VS Code 识别虚拟环境时遇到任何问题,请在扩展库中提交问题,以便我们帮助确定原因.
如果 VS Code 没有自动找到您要使用的解释器,您可以在 Workspace Settings settings.json
文件中手动设置它的路径。 对于后面的任何条目,您只需将该行添加为其他现有设置的同级。)
首先,选择文件(macOS 上的代码)> 首选项 > 设置菜单命令 (Ctrl+,
) 打开您的设置,选择工作区。
然后执行以下任一步骤:
python.pythonPath
创建或修改条目(如果您直接编辑 settings.json
,请将下面的行添加为设置):例如:
Windows:
"python.pythonPath": "c:/python36/python.exe",
macOS/Linux:
"python.pythonPath": "/home/python36/python",
python.pythonPath
指向虚拟环境,例如:Windows:
"python.pythonPath": "c:/dev/ala/venv/Scripts/python.exe",
macOS/Linux:
"python.pythonPath": "/home/abc/dev/ala/venv/bin/python",
${env:VARIABLE}
在路径设置中使用环境变量。 例如,如果您使用解释器的路径创建了一个名为 PYTHON_INSTALL_LOC
的变量,则可以使用以下设置值:"python.pythonPath": "${env:PYTHON_INSTALL_LOC}",
注意:变量替换仅在 VS Code 设置文件中受支持,在
.env
环境文件中不起作用。
通过使用环境变量,可以方便的在路径不同的操作系统之间转移工程,只要确保先在操作系统上设置环境变量即可。
使用 Python: Select Interpreter后,当右键单击文件并选择 Python: Run Python File in Terminal时,将应用该解释器。当您使用Terminal: Create New Integrated Terminal命令时,环境也会自动激活,除非您将 python.terminal.activateEnvironment
设置更改为 false
。
但是,从已激活特定 Python 环境的 shell 启动 VS Code 不会在默认集成终端中自动激活该环境。在 VS Code 运行后使用Terminal: Create New Integrated Terminal
命令。
注意:如果 PowerShell 设置为集成 shell,则无法在集成终端中自动激活 conda 环境。有关如何更改外壳的信息,请参阅集成终端 - 配置。
您对终端内激活的环境所做的任何更改都是持久的。例如,在激活 conda 环境的情况下从终端使用 conda install
会将软件包永久安装到该环境中。同样,在激活了虚拟环境的终端中使用 pip install
将软件包添加到该环境中。
使用Python: Select Interpreter 命令更改解释器不会影响已经打开的终端面板。因此,您可以在拆分终端中激活单独的环境:选择第一个解释器,为其创建一个终端,选择不同的解释器,然后使用终端标题栏中的拆分按钮 (Ctrl+Shift+5
)
默认情况下,python.pythonPath
设置指定用于调试的 Python 解释器。 但是,如果您在 launch.json
的调试配置中有 pythonPath
属性,则会使用该解释器。 更具体地说,VS Code 在确定用于调试的解释器时应用以下优先顺序:
launch.json
中所选调试配置的 pythonPath
属性settings.json
中的 python.pythonPath
设置settings.json
中的 python.pythonPath
设置有关调试配置的更多详细信息,请参阅调试配置
环境变量定义文件是一个简单的文本文件,包含了 environment_variable=value
形式的键值对,#
用于注释。不支持多行值,但值可以引用系统中或文件中更早版本中已定义的任何其他环境变量。有关更多信息,请参阅变量替换。环境变量定义文件可用于调试和工具执行等场景(包括linter、格式化程序、IntelliSense 和测试工具),但不适用于终端。
默认情况下,Python 扩展会在当前工作区文件夹中查找并加载名为 .env
的文件,然后应用这些定义。该文件由用户设置中的默认条目 "python.envFile": "${workspaceFolder}/.env"
标识(请参阅常规设置)。您可以随时更改 python.envFile 设置以使用不同的定义文件。
调试配置还包含一个 envFile
属性,该属性也默认为当前工作区中的 .env
文件(请参阅调试 - 设置配置选项)。此属性允许您轻松设置用于调试目的的变量,以替换默认 .env
文件中指定的变量。
例如,在开发 Web 应用程序时,您可能希望在开发服务器和生产服务器之间轻松切换。无需将不同的 URL 和其他设置直接编码到您的应用程序中,您可以为每个使用单独的定义文件。例如:
dev.env file
# 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 file
# 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
。
注意:当使用多种方法指定环境变量时,请注意存在优先顺序。 包含在由
python.envFile
设置(用户或工作区)指定的.env
文件中的环境变量将覆盖在launch.json
中指定的envFile
中定义的变量,以及在launch.json
文件本身中定义的任何env
变量。 同样,在launch.json
中指定的envFile
中定义的环境变量将覆盖在launch.json
文件中定义的env
变量。
在定义文件中定义环境变量时,您可以通过以下通用语法使用任何现有环境变量的值:
<VARIABLE>=...${env:EXISTING_VARIABLE}...
...
表示值中使用的任何其他文本。 花括号是必需的。.env
文件中出现的顺序进行处理,因此您可以使用之前在文件中定义的任何变量。VAR1
的值为 abcedfg
,则 VAR2='${env:VAR1}'
将值 'abcedfg'
分配给 VAR2
。$
字符可以用反斜杠转义,如 \$
。PYTHONPATH=${env:PROJ_DIR}:${env:PYTHONPATH}
(其中 PROJ_DIR
是任何其他环境变量)。${_${env:VAR1}_EX}
之类的嵌套。PYTHONPATH 环境变量指定 Python 解释器应在其中查找模块的其他位置。在 VS Code 中,可以通过终端设置 (terminal.integrated.env.*) 和/或在 .env
文件中设置 PYTHONPATH。
使用终端设置时,PYTHONPATH 会影响用户在终端内运行的任何工具,以及扩展程序为通过终端路由的用户执行的任何操作,例如调试。但是,在这种情况下,当扩展程序执行不通过终端路由的操作时,例如使用 linter 或格式化程序,则此设置不会对模块查找产生影响。
当使用 .env
文件设置 PYTHONPATH 时,它将影响扩展代表您所做的任何事情以及调试器执行的操作,但不会影响在终端中运行的工具。
如果需要,您可以使用这两种方法设置 PYTHONPATH。
何时使用 PYTHONPATH 的一个示例是,如果您在 src
文件夹中有源代码并在tests
文件夹中有测试。但是,在运行测试时,除非您硬编码相对路径,否则这些测试通常无法访问 src
中的模块。
要解决此问题,您可以通过在 VS Code 工作区中创建 .env
文件,将 src 的路径添加到 PYTHONPATH。
PYTHONPATH=src
然后在 settings.json
文件中设置 python.envFile
指向你刚刚创建的 .env
文件。例如,如果 .env 文件位于您的工作区根目录中,则您的 settings.json
将设置为如下所示:
"python.envFile": "${workspaceFolder}/.env"
PYTHONPATH 的值可以包含由 os.pathsep
分隔的多个位置:Windows 上的分号 (;
) 和 Linux/macOS 上的冒号 (:
)。无效的路径被忽略。如果您发现 PYTHONPATH 的值没有按预期工作,请确保在操作系统的位置之间使用正确的分隔符。例如,在 Windows 上使用冒号分隔位置,或在 Linux/macOS 上使用分号分隔位置会导致 PYTHONPATH 的值无效,该值将被忽略。
注意: PYTHONPATH 不指定 Python 解释器本身的路径,不应与
python.pythonPath
设置一起使用。有关 PYTHONPATH 的其他信息,请阅读 PYTHONPATH 文档。