如何使用Pyenv和Direnv管理Python

来自菜鸟教程
跳转至:导航、​搜索

###介绍

无论您是刚入门还是经验丰富的 Python 开发人员,您都可能发现管理 Python 环境既乏味又痛苦。 管理 Python 版本、库和各种依赖项就像玩沙狐球,其中对象不会碰到任何其他冰球; 如果你这样做了,冰球在你不希望它们出现的任何地方飞来飞去的连锁效应的可能性很快就会随之而来。

在本教程中,您将安装 pyenv 来管理 Python 环境,安装 direnv 来为项目自动配置和获取 virtualenv,为项目设置全局 Python 版本和本地 Python 版本, 并配置 virtualenv 并在移动到项目目录时自动获取 venv。 在本教程结束时,您将能够安装任何有效版本的 python,为每个项目设置和配置虚拟环境,并从混乱中恢复理智。

先决条件

我们将通过 homebrew 安装 pyenvdirenv 以简化安装过程。 在开始之前,如果您还没有 homebrew,请安装它。

使用 pyenv

首先,您将了解如何使用 pyenv。

安装 pyenv

首先,我们将使用自制软件安装 pyenv 并将所需的 pyenv 初始化添加到我们的 ~/.bashrc 文件中。

brew install pyenv
echo 'eval "$(pyenv init -)"' >> ~/.bashrc # initialize pyenv on new shells
source ~/.bashrc # reinitialize bashrc to reflect changes in your current shell

安装后,花点时间检查一下我们的环境是什么样的。 在新系统上,您会看到类似以下内容:

which pyenv
Output/usr/local/bin/pyenv
pyenv versions
Output* system
which pip
Output/usr/local/bin/pip
which python
Output/usr/local/bin/python

这是一个非常标准的快照。 当你执行 python version 时,你会注意到 * system,正如参考所暗示的,这是你系统的 python 版本。 星号表示来自 ${PATH} 的当前 python 二进制文件。 一个好的经验法则是不理会系统二进制文件。 如果您想查看 pyenv 可以为您安装的 python 版本列表,请使用 pyenv install --list

pyenv install 2.7.15
pyenv install 3.7.0
pyenv versions
Output* system (set by /Users/iamjohnnym/.pyenv/version)
  2.7.15
  3.7.0

配置基本要求

现在,让我们升级 pip,因为很可能,它安装了旧版本。 以下命令将遍历您安装的版本并将 pip 更新到最新版本。

for VERSION in $(pyenv versions --bare) ; do
  pyenv shell ${VERSION} ;
  pip install --upgrade pip ;
done

为了我们所需的工作流程,我们想为我们的 Python 2.x 版本安装 py2venv,以便我们可以模仿 python 3.x 如何安装 virtualenvs。 python -m venv .venv

for VERSION in $(pyenv versions --bare | egrep '^2.') ; do
  pyenv shell ${VERSION} ;
  pip install py2venv ;
done

设置全局 Python 版本

即使我们安装了 pyenv,它仍然默认为 system。 要更改此设置,请将 python 3.7.0 设置为我们的全局版本:

pyenv global 3.7.0
pyenv versions
Output  system
  2.7.15
* 3.7.0 (set by /Users/iamjohnnym/.pyenv/version)
which python
Output/Users/iamjohnnym/.pyenv/shims/python

我们有 pyenv 设置和功能。 让我们继续direnv

使用 direnv

direnv 是一个方便的实用程序,它允许您创建一个文件,该文件可以放置在您想要的任何目录中,其功能类似于 .bashrc。 每当您使用此文件进入目录时,您的 shell 都会自动执行它。 这些功能是无穷无尽的,但出于本文的目的,我们将使用它来配置基于文件 .python-version 的 Python virtualenv,然后为我们激活它。 目的是创建无缝的开发流程。 无需担心手动配置或激活 virtualenvs; 让您的计算机为您完成工作。

安装 direnv

使用 homebrew 安装很简单:

brew install direnv

direnv 现在已安装,可以利用了。 让我们尝试一个示例项目。

创建新项目

让我们开始一个项目。 我们将创建一个新目录,设置本地 python 版本,设置我们的 .envrc 文件,然后激活它。

mkdir -p ~/python-projects/pyenv-tutorial
cd $_ # if you're unaware, $_ will execute the last argument of your command
pwd
Output/Users/iamjohnnym/ python-projects/pyenv-tutorial
pyenv local 3.7.0
cat .python-version
Output3.7.0

配置环境文件

此时,我们已准备好创建我们的 .envrc 文件。 使用您喜欢的编辑器,创建该文件并添加以下内容:

# check if python version is set in current dir
if [ -f ".python-version" ] ; then
    if [ ! -d ".venv" ] ; then
        echo "Installing virtualenv for $(python -V)"
        # if we didn't install `py2venv` for python 2.x, we would need to use
        # `virtualenv`, which you would have to install separately.
        python -m venv .venv
    fi
    echo "Activating $(python -V) virtualenv"
    source .venv/bin/activate
fi
# announce python version and show the path of the current python in ${PATH}
echo "Virtualenv has been activated for $(python -V)"
echo "$(which python)"

保存文件。 如果您通过 shell 编辑器执行此操作,例如 vim。 您将看到以下消息,direnv: error .envrc is blocked. Run direnv allow to approve its content。 不要惊慌,因为这是防止文件自动执行的安全功能。 每当更改此文件时,都需要手动批准才能再次自动执行。 要激活它,只需从项目目录中键入 direnv allow

direnv allow
Outputdirenv: loading .envrc
Installing virtualenv for Python 3.7.0
Activating Python 3.7.0 virtualenv
Virtualenv has been activated for Python 3.7.0
/Users/iamjohnnym/.personal/tutorials/pyenv-direnv/.venv/bin/python
direnv: export +VIRTUAL_ENV ~PATH

结论

您现在拥有管理不同 python 版本和项目依赖项所需的工具!