如何正确使用Pyenv和venv?

2024-05-13 23:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

文章内容如下:

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版本:

^{pr2}$

我的疑虑从这里开始:

我应该这么做吗?在

$ 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作为vagrant box的来宾。在

编辑10/10/18:非常感谢各位的回答。但我以最崇高的敬意向你们所有人请求,请你们具体回答我的每一个问题。比起理论,我用实际例子学得更好。在


Tags: 项目django目录pyenvvenvuselocalwith
2条回答

编辑以解决所有问题:

When is an unique directory for virtual environments used? Which option is recommended? Why?

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

How should I install per-project packages listed above?

当您在创建项目环境后切换到它时,请参阅下面我的原始答案,所有安装的包都将以独占方式安装到您当前正在使用的虚拟环境中。在

您可以通过键入以下命令来检查当前使用的python

^{1}$

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

^{pr2}$

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

pip freeze > requirements.txt

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

pip install -r requirements.txt

Should I use virtualenvwrapper?

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

How do I switch between projects (changing Python/virtual-environment in the process) easily or painlessly?

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

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创建的virtualenv

pyenv activate venv_myproject

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

pip freeze > requirements.txt

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

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

这个问题有很多问题。在

virtualenv工作流通常非常简单。您可以为您的项目创建一个目录,将cd放入其中,然后为一个简单的virtualenv运行virtualenv venv,但是您也可以指定您希望在虚拟环境中使用哪个python可执行文件,比如python3.5虚拟环境中使用-p python3.5。这里没有魔法。您需要安装python3.5来创建python3.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发布了一个包含virtualenv的工具,名为pipenv,它看起来非常不错,但我在打破我使用virtualenv的习惯方面遇到了一些困难,而事实是,virtualenv并没有给我带来足够的问题来深入研究这个新项目,但是你的里程可能会有所不同。Reitz先生对python社区的贡献是非常积极的,所以它绝对值得一看。在

相关问题 更多 >