PyenvとDirenvを使用してPythonを管理する方法
###序章
始めたばかりでも、経験豊富なPython開発者でも、Python環境の管理は面倒で面倒な作業であることに気付いたかもしれません。 Pythonのバージョン、ライブラリ、およびさまざまな依存関係の管理は、オブジェクトが他のパックにヒットしないシャッフルボードをプレイするようなものです。 そうした場合、パックが望まない場所に飛んでいくというカスケード効果の可能性がすぐに続きます。
このチュートリアルでは、Python環境を管理するために pyenv をインストールし、 direnv をインストールして、プロジェクトのvirtualenvを自動構成およびソースし、プロジェクトのグローバルPythonバージョンとローカルPythonバージョンを設定します。 、およびvirtualenvを構成し、プロジェクトディレクトリに移動するときにvenvを自動ソースします。 このチュートリアルを終了するまでに、有効なバージョンのPythonをインストールし、プロジェクトごとに仮想環境をセットアップして構成し、混乱から正気を取り戻すことができるようになります。
前提条件
インストールプロセスを簡単にするために、pyenv
とdirenv
の両方をhomebrew
経由でインストールします。 開始する前に、 homebrew をまだインストールしていない場合は、インストールしてください。
pyenvでの作業
まず、pyenvの操作方法を説明します。
pyenvのインストール
まず、homebrewでpyenv
をインストールし、必要なpyenv
initを~/.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
のように機能する任意のディレクトリに配置するファイルを作成できる便利なユーティリティです。 このファイルを使用してディレクトリに入ると、シェルが自動的にファイルを実行します。 機能は無限ですが、この投稿の目的のために、ファイル.python-version
に基づいてPythonvirtualenvを構成し、それをアクティブ化するために使用します。 目的は、シームレスな開発フローを作成することです。 virtualenvsを手動で構成またはアクティブ化することを心配する必要はありません。 あなたのコンピュータにあなたのために仕事をさせてください。
direnvのインストール
インストールは自作で簡単です:
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)"
ファイルを保存します。 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バージョンとプロジェクトの依存関係を管理するために必要なツールが手に入りました。