如何正确使用 Pyenv 和 venv?

Ουι*_*ευα 13 python python-venv pyenv

文章阅读:

Python的虚拟环境:入门

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

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

假设我们有这些目录:

 ~/Projects/PyA : it'll use Python 3.4.3 with Django 2.0
 ~/Projects/PyB : it'll use Python 3.5.1 with Django 2.1
 ~/Projects/PyC : it'll use Python 3.5.6 with Django 2.2
 ~/Projects/PyD : it'll use Python 3.2 with python-igraph
Run Code Online (Sandbox Code Playgroud)

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

$ pyenv install 3.4.3
$ pyenv install 3.5.1
$ pyenv install 3.5.6
$ pyenv install 3.2
Run Code Online (Sandbox Code Playgroud)

我的疑惑从这里开始:

我应该这样做吗?

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

我应该使用 virtualenvwrapper 吗?

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

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

提前致谢。

PS:我使用 ArchLinux 作为 vagrant box 的来宾。

编辑 10/10/18:非常感谢大家的回答。但我向你们所有人致以最崇高的敬意,请你们能具体回答我问的每一个问题。与理论相比,我通过实际例子学习得更好。

Shi*_*lor 8

编辑以解决您的所有问题:

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

每个虚拟环境都“生活”在自己的文件夹中。你安装的所有包都会去那里,特别是如果每​​个环境都有不同的 python 版本。

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

创建项目环境后,当您切换到项目环境时,请参阅下面我的原始答案,所有安装的包都将专门安装到您当前工作的虚拟环境中。

您始终可以通过键入来检查当前正在使用的python

which python
Run Code Online (Sandbox Code Playgroud)

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

which pip
Run Code Online (Sandbox Code Playgroud)

确保您使用的pip install somepackage是正确的python进行安装。如果你想固定包裹,你可以这样做

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

我应该使用 virtualenvwrapper 吗?

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

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

您可以在您的~/.bashrc~/.bash_aliases. 在终端中打开(在我的示例中)~/.bashrc使用文本编辑器,例如 vim/nano 或您喜欢的一个:

nano ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

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

alias activate_proj1="cd ~/project_1 && pyenv activate venv_project_1"
Run Code Online (Sandbox Code Playgroud)

所以你只需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
Run Code Online (Sandbox Code Playgroud)

之后,您可以简单地激活pyenv使用创建的 virtualenv

pyenv activate venv_myproject
Run Code Online (Sandbox Code Playgroud)

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

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

如果您想处理不同的项目,只需激活您需要的环境即可!


bur*_*ing 2

这个问题涉及很多内容。

\n

virtualenv工作流程通常非常简单。您为您的项目创建一个目录,进入其中,然后运行virtualenv venv一个简单的 virtualenv,但您也可以使用-p python3.5Python\xc2\xa03.5 虚拟环境指定您想要在虚拟环境中使用的 Python 可执行文件,例如。

\n

这里没有\xe2\x80\x99t任何魔法。您需要安装Python\xc2\xa03.5来创建Python\xc2\xa03.5虚拟环境。要激活这个虚拟环境,您只需source venv/bin/activate. 激活后,您的 shell 应该反映您正在运行的虚拟环境。您甚至可以运行which python来查看它实际上是针对venv目录结构的。简单的。

\n

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

\n

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

\n