###序章

始めたばかりでも、経験豊富なPython開発者でも、Python環境の管理は面倒で面倒な作業になっているかもしれません。 Pythonのバージョン、ライブラリ、およびさまざまな依存関係の管理は、オブジェクトが他のパックにヒットしないシャッフルボードをプレイするようなものです。 そうした場合、パックが望まない場所に飛んでいくというカスケード効果の可能性がすぐに続きます。

このチュートリアルでは、Python環境を管理するために pyenv をインストールし、 direnv をインストールして、プロジェクトのvirtualenvを自動構成およびソースし、プロジェクトのグローバルPythonバージョンとローカルPythonバージョンを設定します。 、およびvirtualenvを構成し、プロジェクトディレクトリに移動するときにvenvを自動ソースします。 このチュートリアルを終了するまでに、有効なバージョンのPythonをインストールし、プロジェクトごとに仮想環境をセットアップして構成し、混乱から正気を取り戻すことができるようになります。

前提条件

インストールプロセスを簡単にするために、pyenvdirenvの両方をhomebrew経由でインストールします。 開始する前に、 homebrew をまだインストールしていない場合は、インストールしてください。

pyenvでの作業

まず、pyenvの操作方法を説明します。

pyenvのインストール

まず、homebrewでpyenvをインストールし、必要なpyenvinitを~/.bashrcファイルに追加します。

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

インストールしたら、少し時間を取って、環境がどのように見えるかを調べてください。 新しいシステムでは、次のようなものが表示されます。

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

これはかなり標準的なスナップショットです。 python versionを実行すると、* systemに気付くでしょう。参照が示すように、これはシステムのPythonバージョンです。 アスタリスクは、${PATH}で供給されている現在のPythonバイナリを示します。 経験則として、システムのバイナリはそのままにしておくことをお勧めします。 pyenvがインストールできるPythonバージョンのリストを確認するには、pyenv install --listを使用してください。

  1. pyenv install 2.7.15
  2. pyenv install 3.7.0
  3. 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をグローバルバージョンとして設定します。

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

pyenvのセットアップと機能があります。 direnvに移りましょう。

direnvの操作

direnvは、.bashrcのように機能する任意のディレクトリに配置するファイルを作成できる便利なユーティリティです。 このファイルを使用してディレクトリに入ると、シェルが自動的にファイルを実行します。 機能は無限ですが、この投稿の目的のために、ファイル.python-versionに基づいてPythonvirtualenvを構成し、それをアクティブ化するために使用します。 目的は、シームレスな開発フローを作成することです。 virtualenvsを手動で構成またはアクティブ化することを心配する必要はありません。 あなたのコンピュータにあなたのために仕事をさせてください。

direnvのインストール

インストールは自作で簡単です:

  1. brew install direnv

direnvがインストールされ、利用できるようになりました。 サンプルプロジェクトを試してみましょう。

新しいプロジェクトの作成

プロジェクトを始めましょう。 新しいディレクトリを作成し、ローカルのPythonバージョンを設定し、.envrcファイルを設定して、アクティブ化します。

  1. mkdir -p ~/python-projects/pyenv-tutorial
  2. cd $_ # if you're unaware, $_ will execute the last argument of your command
  3. pwd
Output
/Users/iamjohnnym/ python-projects/pyenv-tutorial
  1. pyenv local 3.7.0
  2. cat .python-version
Output
3.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)"

ファイルを保存します。 vimなどのシェルエディタを介してこれを行った場合。 次のメッセージdirenv: error .envrc is blocked. Run direnv allow to approve its contentが表示されます。 これはファイルの自動実行を防ぐためのセキュリティ機能であるため、心配する必要はありません。 このファイルが変更されるたびに、再度自動実行する前に手動で承認する必要があります。 これをアクティブにするには、プロジェクトディレクトリからdirenv allowと入力するだけです。

  1. direnv allow
Output
direnv: 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バージョンとプロジェクトの依存関係を管理するために必要なツールが手に入りました。