如何使用 Pyenv 和 Direnv 管理 Python

介绍

无论你刚刚开始,还是你是一个经验丰富的Python开发人员,你可能已经发现管理你的Python环境是无聊的和痛苦的。

在本教程中,您将安装 pyenv来管理 Python 环境,安装 direnv来自动配置和为项目提供 virtualenv,为项目设置全球 Python 版本和本地 Python 版本,并在进入项目目录时配置 virtualenv 和自动源 venv。

前提条件

我们将通过homebrew安装pyenvdirenv,以便简化安装过程。

与Pyenv合作

首先,你会看到如何使用pyenv。

安装PYENV

要开始,我们将安装pyenv与homebrew,并将所需的pyenv init添加到我们的~/.bashrc文件中。

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

一旦安装,花一会儿检查我们的环境是什么样子. 在新鲜的系统中,你会看到类似的东西:

1which pyenv
1[secondary_label Output]
2/usr/local/bin/pyenv
1pyenv versions
1[secondary_label Output]
2* system
1which pip
1[secondary_label Output]
2/usr/local/bin/pip
1which python
1[secondary_label Output]
2/usr/local/bin/python

當你執行「python 版本」時,你會注意到「* 系統」,正如引用所暗示的那樣,這是你的系統的 python 版本。星座表示目前的 python 二進制來源於你的「${PATH}」。 一個很好的規則是只留下系統的二進制。 如果你想看到「pyenv」可以為你安裝的 python 版本的列表,請使用「pyenv install --list」。

1pyenv install 2.7.15
2pyenv install 3.7.0
3pyenv versions
1[secondary_label Output]
2* system (set by /Users/iamjohnnym/.pyenv/version)
3  2.7.15
4  3.7.0

配置基本要求

现在,让我们升级pip,因为很可能,它安装了一个较旧的版本. 下面的命令将循环通过安装的版本,并更新pip到最新的。

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

为了实现我们想要的工作流程,我们希望为我们的Python 2.x版本安装py2venv,这样我们就可以模仿python 3.x如何安装virtualenvs。

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

设置全球Python版本

即使我们安装了pyenv,它仍然会默认为系统。 为了改变这一点,将python 3.7.0设置为我们的全球版本:

1pyenv global 3.7.0
2pyenv versions
1[secondary_label Output]
2  system
3  2.7.15
4* 3.7.0 (set by /Users/iamjohnnym/.pyenv/version)
1which python
1[secondary_label Output]
2/Users/iamjohnnym/.pyenv/shims/python

我们有pyenv的设置和功能,让我们继续到direnv

与 direnv 合作

direnv是一个方便的实用程序,允许您创建一个文件,放置在任何目录中,您想要的功能如.bashrc。 每次你输入目录与此文件,你的壳会自动执行它。 功能是无限的,但为此帖子的目的,我们将使用它来配置一个Python virtualenv基于文件.python-version,然后为我们激活它。 目的是创建一个无缝的开发流程. 无需担心手动配置或激活virtualenvs;让您的计算机为您工作。

安装预防

安装是简单的与homebrew:

1brew install direnv

direnv现在已经安装,并准备好进行开发,让我们试试一个样本项目。

创建一个新项目

我们将创建一个新目录,设置本地Python版本,设置我们的.envrc文件,并激活它。

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

配置环境文件

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

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

如果您通过壳编辑器进行此操作,例如‘vim’。您将看到以下消息,‘direnv:.envrc 错误被阻止. Run direnv 允许批准其内容’. 不要担心,因为这是一个安全功能,以防止该文件自动执行。 每当该文件被更改时,它需要手动批准才能再次自动执行。 要激活它,只需从项目 dir 键入‘direnv allow’。

1direnv allow
1[secondary_label Output]
2direnv: loading .envrc
3Installing virtualenv for Python 3.7.0
4Activating Python 3.7.0 virtualenv
5Virtualenv has been activated for Python 3.7.0
6/Users/iamjohnnym/.personal/tutorials/pyenv-direnv/.venv/bin/python
7direnv: export +VIRTUAL_ENV ~PATH

结论

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus