如何正确使用Pyenv和Venv?

31

阅读文章:

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 中,有一个名为 Gemfile 的文件,我可以在其中设置当前项目安装的宝石(及其各自的版本),这是一个非常好的主意。 Python 有类似的东西吗?

PS:我在 Vagrant 盒子中使用 guestArch Linux


我刚刚编辑了我的答案,希望可以回答你所有的问题。如果有什么不清楚的地方,请告诉我。 - Shintlor
3个回答

16
什么时候使用唯一的虚拟环境目录?哪个选项被推荐?为什么?
每个虚拟环境都“存在”于自己的文件夹中。安装的所有软件包都会放在那里,特别是如果每个环境都有不同的Python版本。
如何安装上面列出的每个项目的软件包?
当您创建项目环境后切换到该环境时,请参见下面的原始答案。安装的所有软件包都会专门安装到您当前正在使用的虚拟环境中。
您可以随时通过键入来检查当前正在使用的Python解释器
which python

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

which pip

如果您使用pip install somepackage进行安装,请确保目标Python解释器正确。 如果您想锁定软件包,可以执行以下操作:

pip freeze > requirements.txt

任何时候,当前安装的软件包及其版本将被写入文本文件requirements.txt。现在,您可以随时使用以下命令创建新的环境。
pip install -r requirements.txt

我应该使用virtualenvwrapper吗?

我建议您在每个项目中都使用一个虚拟环境,这样其他可能使用某个特殊软件包的固定版本的项目不会受到影响。

如何轻松或无痛地在项目之间切换(同时更改Python/virtual-environment)?

您可以在~/.bashrc文件~/.bash_aliases中定义别名。在终端中,打开(以我的示例为例)~/.bashrc文本编辑器,例如Vim/nano或您喜欢的其他编辑器:

nano ~/.bashrc

并且在最后可以添加一行别名,以便同时切换到项目目录并激活环境:

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

所以您只需要在终端中键入activate_proj1(也可以使用制表符)即可执行两个命令。请不要忘记在使用source ~/.bashrc更改任何内容后再次启用bash文件,或者只需打开新的终端。


原始回答:

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 处理。

如果您想在不同的项目中工作,只需激活所需的环境即可开始!

请注意,您还可以通过将其名称放入您的 .python-version 文件中,在终端中 cd 到文件夹时使 pyenv 激活虚拟环境


1
谢谢,你的回答解决了我的一些疑惑。我已经练习了一些案例,并得出了以下结论:如果你想要每个项目的虚拟环境(就像我的情况),那么最好使用 "pyenv local" 和 "pyenv -m venv",否则使用 "pyenv virtualenv" 或 "virtualenvwrapper"。 - Ουιλιαμ Αρκευα
最好使用“pyenv which python”而不是仅使用“which python”。 - Ουιλιαμ Αρκευα

2
这个问题涉及到很多内容。
通常,virtualenv 工作流程非常简单。你为你的项目创建一个目录,进入该目录,然后运行 virtualenv venv 来创建一个简单的虚拟环境,但是你也可以使用 -p python3.5 指定在虚拟环境中使用哪个 Python 可执行文件,例如创建一个 Python 3.5 虚拟环境。
这里没有任何魔法。你需要安装 Python 3.5 才能创建 Python 3.5 虚拟环境。要激活此虚拟环境,只需运行 source venv/bin/activate。一旦激活,你的 shell 应该反映出你正在操作的虚拟环境。你甚至可以运行 which python 查看它实际上指向的是 venv 目录结构。很简单。
Python 中类似于 Gemfile 的东西通常被称为 requirements.txt,大多数项目都会使用它。你可以通过运行 pip freeze > requirements.txt 来轻松生成它们,或者通过运行 pip install -r requirements.txt 来安装它们。通常,这是在虚拟环境的上下文中完成的,以避免破坏或覆盖操作系统的全局 Python 包。
Kenneth Reitz 发布了一个名为 pipenv 的工具,它集成了 virtualenv,并且看起来非常不错,但我在使用 virtualenv 上遇到的问题还不足以深入探索这个新项目,但你的情况可能会有所不同。Reitz 先生对 Python 社区的贡献是极其积极的,所以它绝对值得一看。

1
回顾您的问题,我认为如果我确实需要运行多个版本的Python,我可能会使用虚拟机或Docker容器,并使用系统的Python site-packages。 - burling

0
我已经创建了一个小型的说明手册,希望这能帮到你!
从安装到激活/停用。
Install `pyenv`
>> curl https://pyenv.run | bash

add these lines to `.bashrc` and execute this file

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 -)"



>> source ~/.bashrc


install gcc if build essential fails
sudo apt install gcc

>> Degraded the package (if there is an issue in installing pyenv)
sudo apt install libc6=2.35-0ubuntu3

supporting packages:

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

to list all the packages:
>> pyenv install -l

Install specific python version:
>> pyenv install 3.8.6

see all python version in pyenv
>> pyenv versions

select that python version
>> pyenv local <python_version>

To create virtual env:
This is will create venv somewhere in root, from there you can activate and deactivate it
>> pyenv virtualenv <python-version> <env-name>
>> pyenv virtualenv 3  venv

activating
>> pyenv local myproject


pyenv deactivate




Issue with `mysqlclient`

>> sudo apt-get install python3-dev libmysqlclient-dev
>> pip3 install mysqlclient

降级libc6的建议是虚假的,而且可能会造成相当大的损害。绝对不要这样做,除非你知道自己在做什么,并且有最近的备份。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接