Python 虚拟环境是“一个自包含的目录树,其中包含特定版本 Python 的 Python 安装,以及许多附加包”(来自官方文档的引用)。
提示必要的xkcd漫画:
故事的寓意:有意识地使用 Python 虚拟环境进行组织,尽量不要污染您的系统 Python 环境,否则会变得混乱。
由于潜在的混乱,已经出现了许多工具来帮助管理这些虚拟环境。本文描述并演示了一些。
- 如何使用本指南
- venv
- 激活虚拟环境
- 执行 Python 脚本
- 停用虚拟环境
- 使用 pip 安装软件包
- 重新创建虚拟环境
- 虚拟环境
virtualenv
安装
- 诗歌
- 设置诗歌虚拟环境位置
- 与诗歌虚拟环境互动
- 用诗歌添加包
- Pipenv
- 安装 Pipenv
- 与 Pipenv 虚拟环境交互
- 使用 Pipenv 安装包
- Pyflow
- 安装 Pyflow
- 与 Pyflow 虚拟环境交互
- 使用 Pyflow 安装包
- pyenv-virtualenv
- 安装
pyenv
和pyenv-virtualenv
pyenv-virtualenv
与虚拟环境交互
- 安装
- 康达
- 安装康达
- 与 Conda 虚拟环境交互
- 使用 Conda 安装软件包
- 孵化
- 安装舱口盖
- 与 Hatch 虚拟环境交互
- 使用 Hatch 安装软件包
- 选择哪种工具?
- 进一步阅读
如何使用本指南
本指南涉及各种问题和受众,反映了我自己脑海中存在的声音。
- 实际上,虚拟环境如何工作?查看摘要_venv
- 我选择的工具如何用于管理虚拟环境?阅读完关于 后,在目录中
venv
找到您的工具以获得简要介绍。(或者建议我在评论中错过的工具!) - 有哪些工具可用于管理虚拟环境?阅读整篇文章!首先扫描目录。在评论中提出批评和建议。
- 哪些工具适合我?可能是virtualenv,Poetry,或者可能是Conda。我在最后进行了这样的辨别。
使用venv
,包含在 Python 中
旁注:该命令是本节中记录的本
virtualenv
机命令的“超集” 。python -m venv
实际上,如果您想要 的速度和附加功能virtualenv
,只需替换您在下面virtualenv
看到的任何地方。python -m venv
请参阅下面的 virtualenv 使用和安装说明。
值得庆幸的是,该模块venv通常pip
包含在您的 Python 安装中。要在目录中创建虚拟环境.venv
,请尝试以下操作:
python -m venv .venv
要进一步解析它:使用 Python 可执行文件作为您要在虚拟环境中使用的 Python 版本。这可能被称为python
,如上所述,或者它可能是python3
orpython3.8
或python3.9
甚至pypy3
; 你明白了。然后告诉它执行venv
模块,然后是您希望虚拟环境驻留的目录的名称。如上所示,我通常使用名称.venv
,或者为了提高知名度,使用venv
.
应该有一个暂停,然后是一个名为的新目录.venv
,您可以使用ls
or看到该目录dir
(在 Mac 和 Linux 上,由于.
前缀,这将是不可见的,除非您使用ls -a
)。您可以使用任何您喜欢的目录名称来代替.venv
.
如果您看到类似“虚拟环境未成功创建,因为 ensurepip 不可用”或其他发行版荒谬的内容,请按照给出的说明或阅读如何安装pip和venv.
激活虚拟环境
现在您可以使用以下命令激活虚拟环境
source ./venv/bin/activate
或者,在 Windows 上:
.\venv\Scripts\Activate.ps1
如果不使用 Bash 或 Powershell,您可能会在./venv/bin
or.\venv\Scripts
目录中查看 CMD、fish 或 csh 的其他选项。
激活后,命令提示符应更改为以虚拟环境目录的名称为前缀。就像是:
(.venv) [default command prompt] $
那(.venv)
(或任何你命名的)是你已经激活你的虚拟环境的标志。在您重新启动计算机或启动不同的 shell 或终端选项卡后,它不会保持活动状态。习惯运行激活脚本。
编辑器/IDE 有时会管理甚至自动激活虚拟环境。有VSCode 说明、Atom 插件、Vim插件、Sublime插件,当然还有PyCharm。
激活后,您应该可以尝试以下操作:
(.venv) $ python
>>> import sys
>>> sys.executable
'/home/my_username/sample_python/.venv/bin/python'
>>>
查看可执行文件在您的虚拟环境目录中的位置?如果虚拟环境未激活,则sys.executable
应该读取类似'/usr/bin/python'
or的内容'C:\\Python38\\python.exe'
。
在虚拟环境中执行 Python 脚本
您可以通过两种方式执行 python 脚本:
- 激活虚拟环境然后运行
python my_script_name.py
- 即使没有激活,也可以使用虚拟环境的 python 运行脚本,例如
./.venv/bin/python my_script_name.py
停用虚拟环境
要退出虚拟环境,请将其停用,如下所示:
(.venv) $ deactivate
$
简单。要重新激活,请重复上述说明。
安装东西
重新激活虚拟环境,并使用 pip 安装一些东西:
(.venv) $ pip install arrow
需要安装包和依赖项,然后您可以导入和使用该包。
您可以注销,忘记 Python,几周后再回来,然后重新激活您的虚拟环境。软件包仍将被安装。但仅限于这种虚拟环境。它不会污染您的系统 Python 环境或其他虚拟环境。
破坏虚拟环境
“我的虚拟环境无法修复,”你说?它发生了。这就是使用虚拟环境的安全性。该怎么办?
烧掉它。
rm -r .venv
全没了。希望你记得包列表(你做了一个pip freeze
或pip list
第一个得到列表,对吧?)
然后重新创建虚拟环境,如上所述。
virtualenv
virtualenv工具与python -m venv
. 事实上,Python 的venv
模块是基于virtualenv的。但是,使用virtualenv
in place ofpython -m venv
具有一些显而易见的优势:
virtualenv
通常比python -m venv
- 像
pip
、setuptools
和等工具wheel
通常是最新的、缓存的(因此性能提升)。术语,virtualenv
这些是种子包。而且,是的,您可以添加其他种子包。
virtualenv
用法
一些不错的virtualenv
命令:
virtualenv --help
最后会告诉你配置文件应该在哪里,以防你想设置一个通用配置virtualenv --upgrade-embed-wheels
会将所有种子包(如pip
等)更新到最新版本。
否则,请按照上述, 的说明进行操作venv,但使用virtualenv
代替python -m venv
。
virtualenv
安装
您可以virtualenv
从包管理器的存储库中安装(例如,使用apt
or dnf
)。
但我强烈建议使用pipx
. 请随意阅读我关于 pipx 的文章“如何安装 Python 命令行工具或脚本? ”以获得解释和说明。
安装后,您pipx
应该能够:
pipx install virtualenv
诗歌
virtualenv
并且venv
有用且简单,做他们擅长的事情。Poetry是另一种工具,不仅可以方便地管理虚拟环境,还可以方便地管理项目和依赖项管理。
请随意阅读我使用 Poetry 管理项目的介绍,以开始使用该工具。
与Pipenv 一样,Python 文档对 Poetry 有几乎官方的几乎推荐。在管理应用程序依赖关系教程(它本身就是使用 Pipenv 的指南)中写道,我们“还应该将诗歌项目视为一种替代的依赖关系管理解决方案”。
有了那热情洋溢的背书,让我们试试诗歌吧。
诗歌装置
您可以按照我的 Poetry 介绍或官方文档来安装 Poetry。
决定诗歌在哪里放置虚拟环境
默认情况下,Poetry 有一个中心位置来安装虚拟环境。这很好,如果您不希望项目目录与虚拟环境目录混杂在一起(换句话说,如果您不希望在项目中看到venv
or.venv
目录)。
如果像我一样,您更喜欢传统主义者,并且希望.venv
每个项目的目录中都有虚拟环境文件,请尝试以下操作:
poetry config virtualenvs.in-project true
这将全局配置诗歌这样做。
与诗歌虚拟环境互动
诗是项目管理的,所以要新建一个虚拟环境,首先创建项目目录,进入该目录:
poetry new my_project
cd my_project
第一次需要虚拟环境时,会自动创建。
激活虚拟环境:
poetry shell
要退出这个虚拟环境,用 退出exit
,Ctrl-d
或者你喜欢退出你的 shell。
无需先进入虚拟环境,您就可以使用poetry run
. 例如,
poetry run python
应该在虚拟环境中为您提供 Python 提示。
用诗歌添加包
与传统方法不同,使用 Poetry,我们不应该使用pip install
安装包。相反,使用poetry add
.
poetry add arrow
以上将安装箭头并将其记录为pyproject.toml文件中的依赖项。
您可能会看到各种其他带有poetry help
.
Pipenv
有趣的是,官方的Python“安装包”教程明确指出“直接管理多个虚拟环境会变得乏味,所以......”然后引用了 Pipenv。
尽管存在这个几乎是官方的几乎推荐,但我仍然使用它,virtualenv因为它可靠且简单,或者Poetry,因为它提供了出色的项目和依赖项管理。
也就是说,Pipenv 已经流行了一段时间,值得关注和尊重。如果你喜欢它,你有充分的理由。
安装 Pipenv
虽然Pipenv 文档建议使用 pip 或您的包管理器,但我强烈建议使用pipx
来安装 Pipenv。您可以在此处阅读有关安装和使用pipx的更多信息。然后...
pipx install pipenv
与 Pipenv 的虚拟环境交互
使用 Pipenv,首先为您的项目创建一个目录很重要。(实际上,这对于任何工具都是一个不错的举措。)
第一次需要虚拟环境时,会自动创建。
激活虚拟环境:
pipenv shell
要退出这个虚拟环境,用 退出exit
,Ctrl-d
或者你喜欢退出你的 shell(如果你尝试了上面的Poetry命令,这一切应该开始感觉有点熟悉)。
无需先进入虚拟环境,您就可以使用pipenv run
. 例如,
pipenv run python
应该在虚拟环境中为您提供 Python 提示。
使用 Pipenv 安装包
Pipenv不使用pip install
安装包,而是使用pipenv install
.
pipenv install arrow
上面将安装箭头并将其记录为Pipfile
当前目录中的依赖项。
您可能会看到各种其他 Poetry 命令 pipenv -h
Pyflow
我承认我喜欢新的和闪亮的东西。在这方面有点喜鹊。
如果您向我询问使虚拟环境变得简单的推荐工具,我会询问您有关您的项目和您的愿望,然后通常建议使用virtualenv或Poetry。
但是如果你想尝试一些有点晦涩但很有希望的东西,特别是如果你处理不同版本的 Python,那么Pyflow应该很有趣。以 Poetry 为例,添加漂亮的 Python 版本管理,向conda致敬,然后用Rust编写整个东西,它看起来有点像 Pyflow。时间会证明 Pyflow 是否成熟并获得社区认可;现在,我喜欢每隔一段时间就试一试。
安装 Pyflow
要安装 Pyflow,请转到Pyflow 发布页面,然后下载并安装适合您平台的软件包。有关更多详细信息,请参阅Pyflow 的安装说明。
与 Pyflow 的虚拟环境交互
要使用 Pyflow 创建新的虚拟环境,首先创建项目:
pyflow new my_project
Pyflow 的一个独特之处:它会提示您输入 Python 版本。此外,如果您指定一个尚未安装的版本,它会以相当快速的方式为您安装它(不像pyenv那样从头开始编译)。
然后将该新目录设为当前工作目录。
cd my_project
第一次需要虚拟环境时,会自动创建。
在虚拟环境中启动 Python:
pyflow python
实际上,您可以使用pyflow
command
. 这是pyflow run
command
.
据我所知,没有一种特定于 Pyflow 的激活虚拟环境的方法。您可以像这样深入了解已安装的虚拟环境:
.\__pypackages__\3.8\.venv\Scripts\Activate.ps1
那是Windows Powershell。对于 Mac 或 Linux:
source ./__pypackages__/3.8/.venv/bin/activate
但是,我有预感这不是 Pyflow 的预期用途。相反,使用pyflow
command
or运行所有内容pyflow python
。
使用 Pyflow 安装包
与许多其他工具一样,您不使用 Pyflowpip install
来安装包。相反,pyflow install
将在虚拟环境中安装包,并将它们添加到pyproject.toml
.
pyflow install arrow
这将安装箭头包。
您可能会看到各种其他带有pyflow help
.
pyenv-virtualenv
如果您想用来virtualenv管理虚拟环境并同时处理多个 Python 版本,pyenv-virtualenv可能适合您。
未经请求的建议
pyenv-virtualenv
:pyenv
除非您确定确实需要它,否则不要使用(或任何其他 Python 版本管理工具)。pyenv
不适用于管理虚拟环境。它管理多个版本的 Python。pyenv
但是,即使您安装了多个版本的 Python ,您也可能不需要。在我的 Fedora 系统上,我只使用python3.6
,python3.9
等,它就可以工作。在 Windows 上,py -3.8
工作py -3.7
得很好。换句话说,pyenv
在假设它解决了您尚未解决的任何问题之前,请仔细查看您的需求和使用情况。值得庆幸的是,如果您需要它,它就在那里。但是,如果您不这样做,请将其添加为书签以备后用,并继续愉快地编写代码。更多不请自来的建议
pyenv-virtualenv
: 如果您正在寻找 Python 版本和虚拟环境管理的组合,Pyflow更年轻、更时髦,而且肯定比 更快。pyenv-virtualenv
不过,可能没有经过实战考验。Conda是另一种带有内置 Python 版本管理的选项。
pyenv-virtualenv 安装
pyenv-virtualenv
是一个插件pyenv
,所以这是一个先决条件。
要安装pyenv
,请按照官方说明或仅使用自动安装程序。自动安装程序只是curl https://pyenv.run | bash
pyenv
在 Windows 上不起作用。有一个 Windows 分支pyenv;但是,它似乎pyenv
与pyenv-virtualenv
.
如果您没有使用自动安装程序,请pyenv-virtualenv
按照官方pyvenv-virtualenv 说明手动安装插件。不过,一个快速提示:git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
与虚拟环境交互 pyenv-virtualenv
要使用 来创建新的虚拟环境pyenv-virtualenv
,请尝试以下操作:
pyenv virtualenv 3.8.5 venv38
这将在当前目录中创建一个虚拟环境。环境中的 Python 版本将是 3.8.5,虚拟环境将有一个别名“venv38”。
如果您不确定可以pyenv
使用哪些 Python 版本,请尝试
pyenv versions
和/或
pyenv install --list
看看有哪些版本,让你可以pyenv install
一个。
成功创建虚拟环境后,它应该会显示在列表中:
pyenv virtualenvs
每个虚拟环境都有两个条目,一个长的,一个短的别名。
要手动激活虚拟环境,您可以使用短别名:
pyenv activate venv38
要停用:
pyenv deactivate
请注意,它确实提供了一个可选功能,当您进入一个包含有效虚拟环境名称的文件的目录pyenv-virtualenv
时,它会自动激活虚拟环境。根据您的使用模式,这可能非常巧妙或非常烦人。请参阅安装说明为您的 shell 激活此功能。如果您使用了自动安装程序并按照其说明进行操作,则可能已经启用。cd
.python-version
一旦您处于激活的虚拟环境中,您可以按照pip
上述venv说明安装软件包。
pyenv help
您可能会找到一些有关和的命令行帮助pyenv help virtualenv
。
康达
Conda不仅仅是另一个 Python 包或环境管理器;它是一个替代的 Python 生态系统。conda的包存储库不同于大多数包/项目经理使用的PyPI 存储库。Conda repo 有大约 1500 个包。PyPI 存储库有大约 150,000 个。也就是说,如果您需要的话, Conda 可以与 pip 一起使用。
安装康达
如果您想要一个包含大型厨房水槽的 Python 和所有科学工具安装,请查看Anaconda。但是,这是与本文中其他工具的苹果与橙色比较。更合适的是miniconda。Miniconda 提供了conda
命令行工具以及入门所需的依赖项。这就是我通常需要的。如果您不确定哪一个适合您,Anaconda 或 miniconda,有一个有用的比较。
要安装 miniconda,请为您找到相关的安装程序,下载并实现它。您的包管理器(apt
、dnf
、brew
等)也有可能拥有 Conda。
在我的一个 linux 安装中,我还需要首先配置 Conda 以使用我的 shell。当我使用 Bash 时,我这样做了:
conda init bash
conda config --set auto_activate_base false
第一个向您的.bashrc
文件添加功能,包括“基本”Conda 环境的自动激活。我并不总是需要 Conda,所以这对我来说并不好。因此,第二行在~/.condarc
您的主目录中添加了一个文件,其中包含该设置。
与 Conda 虚拟环境交互
要创建新的虚拟环境,请指定要使用的虚拟环境的名称(可以是任何名称),以及可选(但推荐)python 版本:
conda create --name env38 python=3.8.5
创建后,您可以使用以下命令激活虚拟环境
conda activate env38
确保您指定了之前选择的虚拟环境名称。
停用虚拟环境
conda deactivate
无论 shell 或平台如何,and 命令的工作方式都是一样的conda activate
。conda deactivate
好的!
使用 Conda 安装软件包
要使用 Conda 安装软件包,请使用conda install
并确保您已使用 激活虚拟环境conda activate
。
conda install arrow
以上将安装“箭头”包。关于 Conda 的一件很酷的事情:它会准确地告诉你它将在哪里做什么。因此,您可以确定它是在虚拟环境(以及哪个)或系统范围内安装软件包。康达很健谈,我喜欢这一点。
孵化
Hatch有点像Pyflow,因为它很时髦(pyproject.toml
例如使用)、晦涩难懂,并且可以做很多事情。它肯定是我见过的用于预填充测试的最自信的工具。
安装舱口盖
我建议使用pipx
安装 Hatch。您可以阅读我在 pipx 上的文章“如何安装 Python 命令行工具或脚本? ”以获得解释和说明。
pipx install hatch
与 Hatch 的虚拟环境交互
要使用 Hatch 创建新的虚拟环境,首先创建项目:
hatch new my_project
注意:Hatch 可以使用Conda来管理 Python 版本。事实上,
hatch conda
将 miniconda 安装到您选择的位置。如果您以这种方式安装了 miniconda,则可以使用类似hatch new -py 3.8.5 my_project
指定 Python 版本的方法。
hatch new
自动创建虚拟环境。您可以使该新目录成为当前工作目录。
cd my_project
然后使用hatch shell
进入虚拟环境。您应该能够从新的 shell 启动 Python 等。
要退出这个虚拟环境,用 退出exit
,Ctrl-d
或者你喜欢退出你的 shell。
使用 Hatch 安装软件包
与许多其他工具一样,您不使用 Hatchpip install
来安装软件包。相反,hatch install
将在虚拟环境中安装软件包。
hatch install arrow
这将安装“箭头”包。
主动投诉:我承认,令我彻底困惑的是,此时 Hatch 似乎没有更新任何可能的嫌疑人:
pyproject.toml
、setup.py
或requirements.txt
。我怀疑这是设计使然:用户必须经过深思熟虑并手动将包添加到正确的位置。我想哪个位置正确取决于您。
您可能会看到各种其他带有hatch -h
.
选择哪种工具?
选择工具实际上是一个主观问题。你是谁,你用 Python 做什么,你的需求/愿望是什么?
如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~