【问题标题】:How to use properly Pyenv and venv?如何正确使用 Pyenv 和 venv?
【发布时间】:2018-10-10 01:57:28
【问题描述】:

文章阅读:

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(及其各自版本),这是一个非常好的主意,是否有类似的东西蟒蛇?

提前致谢。

PS:我使用 ArchLinux 作为 vagrant box 的访客。

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

【问题讨论】:

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

标签: python pyenv python-venv


【解决方案1】:

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

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

每个虚拟环境都“存在”在自己的文件夹中。你安装的所有包都会去那里,特别是如果每​​个环境都有不同的 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

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

pyenv activate venv_myproject

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

pip freeze > requirements.txt

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

如果您想从事不同的项目,只需激活您需要的环境,然后出发!

【讨论】:

  • 谢谢,您的回答消除了我的一些疑惑,我一直在练习一些案例,我得出以下结论:如果您想要每个项目的虚拟环境(我的案例),那么最好使用“pyenv local”和“pyenv -m venv”,否则使用“pyenv virtualenv”或“virtualenvwrapper”。
  • 最好使用“pyenv which python”而不是只使用“which python”
【解决方案2】:

这个问题有很多内容。

virtualenv 工作流程通常非常简单。您为您的项目创建一个目录,cd 进入它,然后运行 ​​virtualenv venv 以获得一个简单的 virtualenv,但您也可以使用 -p python3.5 指定您希望在虚拟环境中使用哪个 python 可执行文件,用于 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 社区的贡献非常积极,所以绝对值得一看。

【讨论】:

  • 回顾你的问题,我想如果我真的需要运行不止一两个版本的python,我可能会使用虚拟机或docker容器,并使用系统的python站点-而是打包。
猜你喜欢
  • 2020-10-31
  • 2019-12-12
  • 2021-02-17
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2022-08-24
相关资源
最近更新 更多