如何正确使用 Pyenv 和 venv?

How can I properly use Pyenv and venv?

提问人:Ουιλιαμ Αρκευα 提问时间:10/10/2018 最后编辑:Michael M.Ουιλιαμ Αρκευα 更新时间:10/19/2023 访问量:27486

问:

文章阅读:

Python 虚拟环境:入门

Pyenv – 为特定项目安装多个 Python 版本

如何管理多个 Python 版本和虚拟环境

假设我们有这些目录:

  • ~/Projects/PyA:将 Python 3.4.3 与 Django 2.0 一起使用
  • ~/Projects/PyB:将 Python 3.5.1 与 Django 2.1 一起使用
  • ~/Projects/PyC:使用 Python 3.5.6 和 Django 2.2
  • ~/Projects/PyD:将 Python 3.2 与 python-igraph 一起使用

首先,我们安装所需的 Python 版本:

pyenv install 3.4.3
pyenv install 3.5.1
pyenv install 3.5.6
pyenv install 3.2

我的问题从这里开始:

我应该这样做吗?

cd ~/Projects/PyA && pyenv local 3.4.3 && python3.4 -m venv proA
cd ~/Projects/PyB && pyenv local 3.5.1 && python3.5 -m venv proB
cd ~/Projects/PyC && pyenv local 3.5.6 && python3.5 -m venv proC
cd ~/Projects/PyD && pyenv local 3.2 && python3.2 -m venv proD

何时使用虚拟环境的唯一目录?建议使用哪个选项?为什么?

我应该如何安装上面列出的每个项目的包?

我应该使用 ?virtualenvwrapper

如何轻松或轻松地在项目之间切换(在此过程中更改 Python/虚拟环境)?

在 Ruby 中,有一个名为 我可以在其中设置为当前项目安装哪些 gem(及其各自的版本),这是一个非常好的主意。Python 有类似的东西吗?Gemfile

PS:我使用 Arch Linux 作为 Vagrant 盒子的访客

蟒蛇 pyenv python-venv

评论

0赞 Shintlor 10/11/2018
我刚刚编辑了我的答案,希望能解决您的所有问题。如果有任何不清楚的地方,请告诉我。

答:

2赞 burling 10/10/2018 #1

这个问题有很多问题。

virtualenv 工作流通常非常简单。你为你的项目创建一个目录,cd进入它,然后运行一个简单的virtualenv,但你也可以指定你希望在虚拟环境中使用哪个Python可执行文件,例如,对于Python 3.5虚拟环境。virtualenv venv-p python3.5

这里没有任何魔法发生。您需要安装 Python 3.5 才能创建 Python 3.5 虚拟环境。要激活此虚拟环境,您只需 .激活后,您的 shell 应反映您正在哪个虚拟环境中运行。你甚至可以运行来查看它实际上是针对目录结构的。简单。source venv/bin/activatewhich pythonvenv

Python 中 Gemfile 的类比类似于大多数项目用作 .这些可以通过运行轻松生成,也可以通过运行来安装。通常,这是在虚拟环境的上下文中完成的,以避免中断或破坏操作系统的全局 Python 包。requirements.txtpip freeze > requirements.txtpip install -r requirements.txt

Kenneth Reitz 发布了一个名为 pipenv 的包含 virtualenv 的工具,它看起来非常漂亮,但我在改掉使用 virtualenv 的习惯方面遇到了一些麻烦,事实是,virtualenv 并没有给我带来足够的问题来深入探索这个新项目,但你的里程可能会有所不同。Reitz 先生对 Python 社区的贡献非常积极,因此绝对值得一看。

评论

1赞 burling 10/10/2018
回顾你的问题,我想如果我真的需要运行一两个以上的 python 版本,我可能会使用虚拟机或 docker 容器,并使用系统的 python 站点包。
16赞 Shintlor 10/10/2018 #2

何时使用虚拟环境的唯一目录?哪 推荐选项?为什么?

每个虚拟环境都“存在于”自己的文件夹中。您安装的所有包都将转到那里,尤其是当每个环境都有不同的 Python 版本时。


我应该如何安装上面列出的每个项目的包?

当你在创建项目环境后切换到它时,请看下面我的原始答案。所有安装的软件包都将专门安装到您当前正在使用的虚拟环境中。

您可以随时通过键入

which python

在终端中,您当前已激活项目环境。此外,您还可以检查

which pip

以确保是否要使用正确的 Python 解释器进行安装。如果要固定包,可以执行以下操作pip install somepackage

pip freeze > requirements.txt

任何时候,当前安装的软件包及其版本都将写入 textfile 。现在,您始终可以使用requirements.txt

pip install -r requirements.txt

我应该使用 virtualenvwrapper 吗?

我总是在每个项目的虚拟环境中工作,因此其他可能使用特殊包的固定版本的项目不受影响。

如何在项目之间切换(更改 Python/虚拟环境 在此过程中)轻松还是无痛?

您可以在 ~/.bashrc 文件或 .在终端中,打开(在我的示例中)带有文本编辑器,例如 Vim/nano 或您喜欢的编辑器之一:~/.bash_aliases~/.bashrc

nano ~/.bashrc

在接近末尾的某个地方,您可以添加一行带有别名的行,以切换到项目目录并同时激活环境:

alias activate_proj1="cd ~/project_1 && pyenv activate venv_project_1"

因此,您只需在终端中键入(Tab 自动补全也有效),然后执行两个命令。不要忘记在更改某些内容后再次获取 bash 文件,或者只是打开一个新终端。activate_proj1source ~/.bashrc


原答案:

pyenv将处理您需要的一切:

我的工作流程(对于一个项目以使其更具可读性)如下:

pyenv install 3.5.1
cd python_projects
mkdir myproject
cd myproject
pyenv virtualenv 3.5.1 venv_myproject

之后,您可以简单地激活使用pyenv

pyenv activate venv_myproject

这将打开您独特的环境。在这里,你可以做所有你想做的事情,例如,使用pip安装你的软件包等。 完成环境设置后,可以冻结环境并创建需求文件:

pip freeze > requirements.txt

以便在需要时能够重建环境。这样,可能需要的所有开销(设置 PATH 等)都将由 pyenv 处理。

如果你想在不同的项目上工作,只需激活你需要的环境,就可以开始了!

请注意,当您在终端中放置文件夹时,您也可以通过将其名称放入文件中来使 pyenv 激活 virtualenvcd.python-version

评论

1赞 Ουιλιαμ Αρκευα 10/12/2018
谢谢,你的回答消除了我的一些疑问,我一直在练习一些案例,我得出了以下结论:如果你想要每个项目的虚拟环境(我的情况),那么最好使用“pyenv local”和“pyenv -m venv”,否则使用“pyenv virtualenv”或“virtualenvwrapper”。
0赞 Ουιλιαμ Αρκευα 10/12/2018
最好使用“pyenv which python”而不是只使用“which python”
0赞 Deepanshu Mehta 4/4/2023 #3

我制作了一本小说明书。

从安装到激活/停用

安装pyenv

卷曲 https://pyenv.run |巴什

将以下行添加到此文件:.bashrcsource

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# Restart your shell for the changes to take effect.

# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:

eval "$(pyenv virtualenv-init -)"

源代码 ~/.bashrc

如果构建基本失败,请安装:gcc

sudo apt install gcc

已降级软件包(如果安装 pyenv 时出现问题) sudo apt 安装 libc6=2.35-0ubuntu3

支持包:

sudo apt install -y zlib1g-dev
sudo apt-get install liblzma-dev

要列出所有软件包,请执行以下操作:

pyenv 安装 -l

安装特定的 Python 版本:

pyenv 安装 3.8.6

查看 pyenv 中的所有 Python 版本:

Pyenv 版本

选择该 Python 版本:

Pyenv当地<python_version>

要创建虚拟环境,请执行以下操作: 这将在根目录的某个地方创建venv,从那里您可以激活和停用它

pyenv virtualenv pyenv virtualenv 3 venv

激活

pyenv local myproject

pyenv 停用

问题mysqlclient

sudo apt-get 安装 python3-dev libmysqlclient-dev pip3 安装 mysqlclient

评论

0赞 tripleee 10/19/2023
降级的建议是虚假的,并且可能具有相当大的破坏性。除非您知道自己在做什么并且最近有良好的备份,否则绝对不要这样做libc6