如何正确使用Pyenv和venv?

时间:2018-10-10 01:57:28

标签: python pyenv python-venv

阅读文章:

Python Virtual Environments: A Primer

Pyenv – Install Multiple Python Versions for Specific Project

How to manage multiple Python versions and virtual environments

假设我们有以下目录:

 ~/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

首先,我们安装所需的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 的文件,我可以在其中设置为当前项目安装哪些gem(及其各自的版本),这是一个很好的主意,对于Python?

谢谢。

PS:我将ArchLinux用作来宾游击队。

编辑10/10/18::非常感谢您的回答。但是,我谨向所有人致以最大的敬意,请您能具体回答我的所有问题。我从实践例子中学到的东西比从理论学到的要好。

2 个答案:

答案 0 :(得分:2)

编辑以解决所有问题:

  

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

每个虚拟环境都“生活”在其自己的文件夹中。您安装的所有软件包都将安装到那里,尤其是在每种环境都有不同的python版本的情况下。

  

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

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

您始终可以通过输入

来检查当前正在使用哪个python
which python

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

which pip

确保是否使用pip install somepackage进行安装,以正确的python为目标。如果您想固定包装,则可以

pip freeze > requirements.txt

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

创建一个新环境。
pip install -r requirements.txt
  

我应该使用virtualenvwrapper吗?

我将始终在每个项目的虚拟环境中工作,因此不会影响可能使用特殊程序包的某些固定版本的其他项目。

  

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

您可以在~/.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

此后,您只需使用{p> 1激活由pyenv创建的virtualenv

pyenv activate venv_myproject

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

pip freeze > requirements.txt

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

如果您要从事不同的项目,只需激活所需的环境,然后就可以使用!

答案 1 :(得分:0)

这个问题有很多事情。

virtualenv工作流程通常非常简单。您为项目创建了一个目录,将其插入CD,然后为简单的virtualenv运行virtualenv venv,但是您也可以使用-p python3.5为python3指定您在虚拟环境中想要的python可执行文件。 .5虚拟环境,例如。这里没有魔术。您需要安装python3.5才能创建python3.5虚拟环境。要激活此虚拟环境,只需source venv/bin/activate。激活后,您的外壳程序将反映您正在使用的虚拟环境。您甚至可以运行which python来查看它实际上是针对venv目录结构的。很简单。

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

肯尼斯·雷茨(Kenneth Reitz)发布了一个包含virtualenv的工具,名为pipenv,它看起来非常不错,但是我在打破使用virtualenv的习惯时遇到了一些麻烦,事实是,virtualenv还没有给我足够的知识问题需要深入探索这个新项目,但是您的工作量可能会有所不同。 Reitz先生对python社区的贡献是非常积极的,因此绝对值得一看。