Articles

Pyenvを使用してMac上で複数のバージョンのPythonを実行する方法

ローカルのPython開発環境を管理することは、経験豊富な開発者にとっても パッケージ管理には十分に文書化された戦略がありますが、必要なときに必要なPythonのバージョンを実行するために必要な別のステップがあります。

なぜPythonのバージョンが重要なのですか?

最初は奇妙な概念ですが、プログラミング言語は他のソフトウェアと同じように変わります。 彼らはあなたのお気に入りのApiや他のソフトウェアのいずれかのようなバグ、修正、および更新を持っています。 同様に、異なるリリースは、セマンティックバージョンとして知られている三桁の数字で識別されます。

😭 😭 😭pic.twitter.com/yt1Z2439W8

-Denny Perez(@dennyperez18)May28,2019

長年にわたり、Python2はプログラミング言語の一般的に使用されるメジャーバージョンでした。 2020年1月、Python2は寿命を迎え、それ以降はPython3のみが言語のコアメンテナによってサポートされるようになります。 Python3は着実に開発を進めており、定期的に新しいアップデートをリリースしています。 それは私が定期的にそれらの更新を取得することが重要になります。最近、私は自分のシステムにインストールしていないバージョンのPython3.5.9に依存しているmacOSでプロジェクトを実行しようとしました。 Pythonパッケージマネージャー pipがそれをインストールできると考えるのは論理的に思えるかもしれません*が、そうではありませんでした:

$ pip install python3.5.9
Collecting python3.5.9
ERROR: Could not find a version that satisfies the requirement python3.5.9 (from versions: none)
ERROR: No matching distribution found for python3.5.9

また、公式のPython webサイトからそのバージョンをダウンロードすることもできましたが、既存のバージョンのPythonと一緒にMacでどのように実行しますか? インタプリタを実行するたびに使用するPythonのバージョンを指定します(python3。たとえば、7またはpython3.5)は、せいぜいエラーが発生しやすいようです。 より良い方法があるはずです。

(上記のメモ:私はこれが経験豊富なPython開発者には意味がないことを知っていますが、当時は私には意味がありました。 私は喜んで私はまだそれが必要だと思う理由について話すだろう。)

pyenvのインストールと設定

ありがたいことに、pyenvはこの一連の複雑さを回避するために存在します。 開始するには、pyenvをインストールする必要がありました。 私はソースから自分で複製してコンパイルすることができますが、Homebrewパッケージマネージャーを介してこのようなパッケージを管理することを好みます:

$ brew install pyenv

pyenvを介してPythonのバージョンを使用するには、シェルのPATH変数を理解することが不可欠です。 PATHは、シェルがコマンドの名前でファイルを検索する場所を決定します。 シェルがpyenvによって実行されるPythonのバージョンを見つけ、デフォルトでインストールされているバージョン(システムバージョンと呼ばれることが多い)ではな パスを変更しない場合、結果は次のとおりです。

$ which python
/usr/bin/python

これはPythonのシステムバージョンです。pyenvを正しくセットアップするには、Bashまたはzshで以下を実行します:これで、Pythonのバージョンを確認すると、pyenvによって管理されていることがわかります。

$ which python
/Users/my_username/.pyenv/shims/python

そのexport文(PATH=)はこのシェルインスタンスのためにのみ変更されるため、永続的な変更にするには、それをdotfilesに追加する必要があります。 Zshは正式にはmacOSのデフォルトシェルなので、私はそれに焦点を当てます。 同じ構文を~/に追加します。zshrc file:

$ echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc

zshでコマンドを実行するたびに、pyenvバージョンのPythonが使用されます。 コマンドを評価および展開しないように、echoで一重引用符を使用したことに注意してください。

を。zshrcファイルはzshインスタンスのみを管理するので、シェルが何であるかを確認し、関連するドットファイルを編集してください。 デフォルトのシェルが何であるかを再確認する必要がある場合は、echo SHELL SHELLを実行できます。 Zshの場合は、上記のコマンドを使用します。 Bashを使用する場合は、~/を変更します。zshrcを~/に設定します。bashrc。 詳細を知りたい場合は、pyenvのREADMEでパス設定を深く知ることができます。

pyenvを使用してPythonバージョンを管理する

pyenvが制御されたので、システムPythonのみが利用可能であることがわかります。

$ pyenv versions
system

上記のように、このバージョンを使用することは絶対に望ましくありません(理由の続きを読む)。 Pyenvが正しく設定されたので、私は定期的に使用するPythonのいくつかの異なるバージョンを持っていたいと思っています。

pyenv install–listを実行することで、pyenvがアクセスできるすべての異なるリポジトリから利用可能なすべてのPythonバージョンを確認する方法があります。 これは、将来的にレビューするのに役立つかもしれない長い、圧倒的なリストです。 今のところ、私は各ドットリリースの最新のものに固執します(3.5。xまたは3.6。Xここで、xは最新のものです)Pythonのダウンロードページにあります。 これを念頭に置いて、3.5.9と3.8.0をインストールします:

$ pyenv install 3.5.9
$ pyenv install 3.8.0

これには時間がかかりますので、お茶を飲んでください(または上記のリンク 興味深いことに、出力はそのバージョンのPythonのダウンロードとビルドを歩いていることに注意してください。 たとえば、出力は、ファイルが直接から来ていることを示していますPython.org.

すべてがインストールされたら、デフォルトを設定できます。 私は最先端に住んでいるのが好きなので、グローバルなデフォルトのPythonバージョンを最新のものに設定しました:

$ pyenv global 3.8.0

そのバージ 確認するには:

$ python -V
Python 3.8.0

実行したいプロジェクトはPython3.5でのみ動作するので、バージョンをローカルに設定し、使用中であることを確認します。

$ pyenv local 3.5.9
$ python -V
Python 3.5.9

pyenvでlocalオプションを使用したため、その情報を追跡するためにファイルを現在のディレクトリに追加しました。 今、私は最終的に私が望むプロジェクトのための仮想環境を設定し、私が正しいバージョンのPythonを実行していることを確認することができます。P>

$ python -m venv venv
$ source ./venv/bin/activate
(venv) $ which python
/Users/mbbroberg/Develop/my_project/venv/bin/python

詳細については、Mac上の仮想環境の管理についてのこのチュートリアルをチェックしてください。

ラップアップ

デフォルトでは、複数のPythonバージョンを実行するのは難しい場合があります。 私はpyenvから始めると、必要なときに実行するように設定する必要があるPythonのバージョンがあることを保証します。