TL; DR:このチュートリアルでは、競合することなく複数のPythonバージョンとツールをインストールするために私が行うことを説明します。
私は過去5年間Pythonを使用しています。最初は学問的にそして趣味として、そして専門的に。常に非常に一般的である1つのことは、異なるPythonバージョンで複数のプロジェクトを持つことです。使用する言語に関係なく、異なるバージョンを対象とするプロジェクトを持つことは悪夢になる可能性があります。Pythonに関しては、違いはありません。実際のところ、それはもっと悪いです。たとえば、サポートされなくなったにもかかわらず、Python2でのみ機能するライブラリがあります。幸い、さまざまなPythonバージョンをシームレスに処理するのに役立つツールがいくつかあります。
このガイドではLinuxに焦点を当てますが、macOSに簡単に適応できます。実際、私はMacBookを使用しており、同じ手順に従って、ほとんど変更を加えずにワークスペースを構成しています。また、私zshはデフォルトのシェルとして使用していますが、このガイドは同様に適用さbashれます。
それで、これ以上苦労することなく、Pythonワークスペースをセットアップする方法は次のとおりです。
ステップ1.要件を定義する
実際の構成に入る前に、最適なセットアップがどのように見えるかを定義するために少し時間がかかる必要があります。私にとっては、次のようになります。
Python 2.7以降、Python 3.6、Python 3.7、およびPython3.8がインストールされている必要があります。
Python3.8がデフォルトバージョンである必要があります。
バージョンを簡単に切り替えることができなければなりません。
ipython指定したデフォルトのPythonバージョンを使用してを起動できる必要があります。
私が使用する依存関係ツール-pipenvおよびpoetry-は、すべてのPython3以降のバージョンで機能する必要があります。
ステップ2.複数のPythonバージョンをインストールして構成する
複数のバージョンをインストールしてそれらを切り替えることができるようにするために、私はを使用しますpyenv。 pyenv次のようないくつかの利点があります。
ユーザーごとにグローバルPythonバージョンを変更できます。
プロジェクトごとのPythonバージョンのサポートを提供します。
すべてが$HOMEディレクトリにインストールされます。これは、デフォルトのPythonインストールを台無しにするリスクがないことを意味します。
サポートpypy、anaconda、CPython、Stackless-Python、その他!
に加えてpyenv、pyenv-virtualenvプラグインを使用して仮想環境を管理しています。
インストールpyenvとそのプラグイン
昨年から、macOSとLinuxの両方でHomebrewを使用しています。したがって、次の手順は私にとってOSに依存しません。
brew install pyenv
brew install pyenv-virtualenv
virtualenvsのディレクトリを作成する
各プロジェクトには、それぞれ独自の仮想環境が関連付けられている必要があります。このようにして、依存関係に競合を発生させることなく、一度に複数のプロジェクトで作業できます。私はすべてのvirtualenvを$HOME/.veディレクトリの下に置いています。
mkdir -p $HOME/.ve
フォルダが作成されたら、パスを自分に追加します~/.zshrc(bashユーザーの場合はに追加します~/.bashrc):
cat <<"EOT" >> ~/.zshrc
# pyenv config# Set virtualenv direxport WORKON_HOME=~/.ve
# Initialize pyenvif command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"fi# Initialize pyenv-virtualenveval "$(pyenv virtualenv-init -)"
EOT
変数WORKON_HOMEはpipenv 、仮想環境を配置する場所を示します。
それが完了したら、新しいウィンドウを閉じて開くか、次のコマンドを実行して、シェルを再起動できます。
exec $SHELL
必要なすべてのPythonバージョンをインストールします。
PY_DEFAULT=3.8.5
PY_VERSIONS=( $PY_DEFAULT 3.7.8 3.6.11 2.7.18 )
for py_version in "${PY_VERSIONS[@]}"do
echo -e "Installing Python $py_version…\n\n"
# Install specific Python version
pyenv install $py_versiondone
ステップ3.ツールのインストール
依存関係の管理には、2つの異なるツールを使用します。pipenv最近ではpoetry。最終的にはpoetry、両方が必要になった時点で解決するでしょう。
また、迅速なデータ分析タスクのために、私はjupyterノートブックに大きく依存しています。そしてipython、派手なPythonインタープリターとして。
繰り返しますが、私はグローバルインストールを汚染したくありません。これを回避するために、ツールのvirtualenvpyenv-virtualenvを作成するために使用できます。
インストールをしてみましょうjupyter、pipenv、そして詩を。
# Creating tools3 venv
pyenv virtualenv $PY_DEFAULT tools3
# Activating
pyenv activate tools3
# Upgrade pip
pip install –upgrade pip
# Install Jupyter
pip install jupyter
# Install Jupyter extensions
pip install jupyter_nbextensions_configurator rise
jupyter nbextensions_configurator enable –user
# pipenv
pip install pipenv
# poetry (using preview version to fix a bug in the 1.0.10 version)
pip install –pre poetry -U
を使用する場合はpipenv、必ずその完了スクリプトをインストールしてください。次のようにシェルに追加できます。
echo 'eval "$(pipenv –completion)"' >> ~/.zshrc
そしてのためにpoetry:
# Oh-My-Zsh
mkdir -p $ZSH/plugins/poetry
poetry completions zsh > $ZSH/plugins/poetry/_poetry
補完はoh-my-zshプラグインなので、〜/ .zshrcファイルのプラグインリストに詩を追加する必要があります。
plugins(
poetry
…
)
これは、以下を使用して実行できますsed。
sed -i.bak 's/^plugins=(\(.*\)/plugins=(poetry\n \1/' ~/.zshrc
次に、のように、内部にvirtualenvpoetryを作成するように構成する必要があります。~/.vepipenv
echo 'export POETRY_VIRTUALENVS_PATH=$WORKON_HOME' >> ~/.zshrc
より多くの詩の構成
もう1つ、pipenvのデフォルトの動作は.env、プロジェクトのルートで定義されている環境変数をロードすることです。実行中pipenv shellとの2つの場合にそれを行いpipenv runます。poetry一方、はそれをサポートしていません。回避策として、手動でロードする必要があります。
プロセスを自動化するために、poetry shellまたはを実行するたびにロードするシェル関数を作成しましたpoetry run。無効にしたい場合は、POETRY_DONT_LOAD_ENV変数を設定できます。これも、PIPENV_DONT_LOAD_ENV動作方法と似ています。
cat <<"EOT" >> ~/.zshrc
# Get the poetry's full path
POETRY_CMD=$(which poetry)
# Allow poetry to load .env filesfunction poetry() {
# Define the full command. i.e. poetry [run|shell|version]
POETRY_FULL_CMD=($POETRY_CMD "$@")
# if POETRY_DONT_LOAD_ENV is *not* set, then load .env if it exists
# also, only loads when for "run" and "shell" commands.
if [[ -z "$POETRY_DONT_LOAD_ENV" && -f .env && ("$1" = "run" || "$1" = "shell") ]]; then
echo 'Loading .env environment variables…'
env $(grep -v '^#' .env | tr -d ' ' | xargs) $POETRY_FULL_CMD
else
$POETRY_FULL_CMD
fi
}
EOT
次に、virtualenvを 非アクティブ化しますtools3。
# Deactivating the venv
pyenv deactivate
ステップ4.通訳者の優先順位を設定する
必要なすべてのバージョンをインストールしたので、何らかの優先順位を確立する必要があります。基本的に、インストールしpoetryたvirtualenvをアクティブにせずに、またはその他のツールを使用したいと思います。pyenv globalコマンドを使用してそれを行うことができます。
PY_DEFAULT=3.8.5
PY_VERSIONS=( $PY_DEFAULT 3.7.8 3.6.11 2.7.18 )
pyenv global $PY_VERSIONS tools3 system
確認しよう:
$ pyenv versions
* system (set by /home/miguel/.pyenv/version)
* 2.7.18 (set by /home/miguel/.pyenv/version)
2.7.18/envs/tools2
* 3.6.11 (set by /home/miguel/.pyenv/version)
* 3.7.8 (set by /home/miguel/.pyenv/version)
* 3.8.5 (set by /home/miguel/.pyenv/version)
3.8.5/envs/tools3
* tools3 (set by /home/miguel/.pyenv/version)
すべてが良さそうです。シェルを再起動する時が来ました。それだけです。
パッケージの誤ったインストールの防止
私によく起こったことの1つは、を使用してグローバルインタープリターの1つにパッケージをインストールすることでしたpip。前に述べたように、各Pythonインタープリターをそのままにしておくことをお勧めします。我々は何もインストールする必要がある場合、私は私が行ったように、新しいvirtualenvのを作成することを好むtools3。
では、どのようにして各Pythonインストールをロックできますか?
それは実際にはかなり簡単です。virtualenvがアクティブなpip場合にのみ、パッケージをインストールするように設定できます。
echo 'export PIP_REQUIRE_VIRTUALENV=true' >> ~/.zshrc
pipenvと詩はどうですか?
ここで、poetryPython 3.6を必要とするプロジェクトがある場合poetry、3.6バージョンを使用するように指示すると、インストールしたPython3.6.11を使用してvirtualenvが自動的に作成されます。
例:
# pyproject.toml
…
[tool.poetry.dependencies]python = "~3.6"
…
出力:
$ poetry env use 3.6
Creating virtualenv sandbox-aBhl6cgV-py3.6 in /home/miguel/.ve
Using virtualenv: /home/miguel/.ve/sandbox-aBhl6cgV-py3.6
$ poetry shell
Loading .env environment variables…
Spawning shell within /home/miguel/.ve/sandbox-aBhl6cgV-py3.6
$ . /home/miguel/.ve/sandbox-aBhl6cgV-py3.6/bin/activate
(sandbox-aBhl6cgV-py3.6) $
結論
それはほとんどそれです!このチュートリアルが私と同じようにあなたにも役立つことを願っています。ワークスペースを再構成する必要があるときはいつでも、それらの手順に従います。また、このガイドからコピーして貼り付ける代わりに、自動化するシェルスクリプトを作成する可能性があります。このチュートリアルは当初、medium.com / @ henriquebastos / the-definitive-g ..に基づいていました。これは、自分のワークスペースをセットアップする方法のインスピレーションとして役立ちました。