如何使用pyenv、virtualenv和pipenv?

3
我正在寻找一个类似于Ruby的RVM的Python版本管理器,我发现pyenv,但它仅仅是一个切换器,所以我需要将其与virtualenv结合使用(根据我目前的理解),这有点费力,但我可以习惯它。此外,我已经阅读到pipenv建议使用代替virtualenv,那么它能与pyenv一起使用吗?如何操作?
然而,文章What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?提到pyenv在Python 3.6中已被弃用。所以我又陷入了困惑,我应该使用什么?如何使用?
系统:Arch Linux,Plasma。
当前安装的Python版本:2.7.14和3.6.4
我计划做的事情:我需要一个框架,如果出于任何原因,我需要使用版本3.4.7、3.2.6、2.6.7和2.3.3,我可以毫不费力地完成它。
我希望得到你的帮助,感谢大家。

不,pyenv并没有被弃用;而是 pyvenv 被弃用了。 - phd
哦,你说得对,我会修复它的。谢谢。 - Ουιλιαμ Αρκευα
4个回答

3

你有两个选择:

  1. 同时使用pyenv和pyenv-virtualenv wrapper。

例如,你想创建一个名为test的新项目,并为其创建虚拟环境。

  • pyenv install 3.6.5
  • pyenv virtualenv 3.6.5 test
  • cd /project_path
  • pyenv local test

下次访问该项目目录时,它将自动切换到test环境。

  1. 同时使用pyenv和pipenv。

首先,在环境配置文件(bashrc或zshenv等)中添加此脚本。

export PIPENV_VENV_IN_PROJECT=1
PROMPT_COMMAND='prompt'
precmd() { eval "$PROMPT_COMMAND" }
function prompt()
{
    if [ ! $PIPENV_ACTIVE ]; then
      if [ `pipenv --venv 2>/dev/null` ]; then
        export PIPENV_INITPWD="$PWD"
        pipenv shell
      fi
    elif [ $PIPENV_INITPWD ] ; then
      cd "$PIPENV_INITPWD"
      unset PIPENV_INITPWD
    fi
}

然后

  • pyenv install 3.6.5 (安装Python 3.6.5)
  • pyenv shell 3.6.5 (设置当前shell环境为Python 3.6.5)
  • pip install pipenv (安装pipenv)
  • cd /project_path (切换到项目路径)
  • pipenv --python 3.6.5 (使用Python 3.6.5创建虚拟环境)

下次访问该目录时,它将更改为正确的虚拟环境(注意:在访问项目目录之前,应使用pyenv shell 3.6.5命令)。


0
如果我没记错的话,virtualenv 更多是为了确保你的应用程序不会干扰同一运行系统上的其他应用程序。如果你正在运行基于 UNIX 的操作系统(Linux/FreeBSD/macOS),你可以编译 Python(使用 configure --prefix=/opt/python/)并在你的 .bashrc 或 bash_profile 中设置二进制可执行文件的别名。
alias python363='/opt/python363/bin/python3'

或者,如果你想要将其应用到整个系统并且拥有root访问权限,你可以创建一个符号链接:ln -s /opt/python363/bin/python3 /usr/bin/python363(例如针对版本3.6.3)。
然后使用python363 /path/to/your/script.py来执行该文件。
是否有更好的方法?可能有,但这是解决你的困境的一种替代方案,尽管不是最优雅的。
注意:你还需要为该特定版本安装的pip命令设置别名,以便正确安装库。
例如,在.bashrc或bash_profile中。
alias pip363='/opt/python363/bin/pip3'

或者作为根用户使用符号链接

 ln -s /opt/python363/bin/pip3 /usr/bin/pip363

0

pyenv支持虚拟环境

只需安装您想要的Python版本,例如:

pyenv install 3.6.4
pyenv install 3.6.0

使用参数global选择您想要的Python版本。

pyenv global 3.6.4

然后创建一个虚拟环境(我将命名为 myve)

pyenv virtualenv myve

并使用 activate 命令激活它

pyenv activate myve

与您手动创建的典型virtualenv唯一的区别是位置和您将为其命名,但最终它非常舒适且类似于virtualenvwrapper的工作方式。

使用以下命令检查已激活的virtualenv或版本:

pyenv versions

Deactivate with

pyenv deactivate 

使用 uninstall 命令来删除一个虚拟环境或 Python 版本。

pyenv uninstall myve

0

最近的旧方法

使用 Pyenv,第一件事就是安装 virtualenv 插件。这使得命名和使用虚拟环境变得非常简单。

*

新的方式

仍然使用 Pyenv 来维护 Python 版本。使用 pipenv 作为包管理和虚拟环境工具。唯一的技巧是在 PYENV_ROOT 使用它的 shim 更新后,将export PIPENV_PYTHON="$PYENV_ROOT/shims/python"添加到 .rc 文件 (.bashrc 或 .zshrc) 中。之后pyenv which python可能会出错,但 pipenv 不会。我在我的博客文章中详细介绍了这个过程,不要嫌我插科打诨。


所以我刚刚安装了 pyenv,之前一直在使用 pipenv 并已经安装了一段时间...听起来为了让我的系统处于正确的状态,我应该卸载原来的 pipenv,并将其重新安装到每个 pyenv 安装的 Python 版本中?是这样吗? - monkut

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