Pythonワークスペースの設定方法

 

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インストールを台無しにするリスクがないことを意味します。

サポートpypyanacondaCPythonStackless-Python、その他!

に加えてpyenvpyenv-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_HOMEpipenv 、仮想環境を配置する場所を示します

それが完了したら、新しいウィンドウを閉じて開くか、次のコマンドを実行して、シェルを再起動できます。

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を作成するために使用できます。

インストールをしてみましょうjupyterpipenv、そして詩を

# 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.通訳者の優先順位を設定する

必要なすべてのバージョンをインストールしたので、何らかの優先順位を確立する必要があります。基本的に、インストールしpoetryvirtualenvをアクティブにせずに、またはその他のツールを使用したいと思います。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 ..基づいていました。これは、自分のワークスペースをセットアップする方法のインスピレーションとして役立ちました

https://miguendes.me/how-i-set-up-my-python-workspace

コメントを残す

メールアドレスが公開されることはありません。

Next Post

あなたが絶対に使用しなければならない7つのpytestプラグイン

金 11月 13 , 2020