複数のPythonバージョンと仮想環境を管理する方法

追加2019年1月:macOS Mojaveにアップグレードした後にこのブログに戻る場合は、一般的なpyenvの「zlibnotavailable」問題の解決策についてこのgithubの問題を参照してください。

始める前に、タイトルで使用されている用語について簡単に説明しましょう。

  • 複数のPythonバージョン:同じマシンへのPythonの異なるインストール、たとえば2.7と3.4。
  • 仮想環境:他のプロジェクトに影響を与えることなく、Pythonの特定のバージョンとプロジェクト固有のパッケージの両方をインストールできる分離された独立した環境。

ここでは、これらを操作するための3つの異なるツールと、それぞれが必要になる場合について説明します。次のユースケースを見てみましょう。

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

Pythonの単一バージョン(バージョン3.3以降)を使用していて、さまざまな仮想環境を管理したい場合venvは、必要なのはそれだけです。

仮想環境の有無にかかわらず3.3以降でPythonの複数のバージョンを使用する場合は、について読み続けてください。pyenv

あなたもで動作するようにしたい場合はPython 2、その後、pyenv-virtualenv考えるためのツールです。

venv

Python 3.3以降では、venvパッケージが含まれています。軽量の仮想環境を作成するのに理想的です。

Python 3.6までは、呼び出さpyvenvれたスクリプトもラッパーとして含まれていましたvenvが、これは非推奨になりました。Python3.8では完全に削除されます。を使用する場合もまったく同じ機能を使用できますvenv。既存のドキュメントはすべて更新する必要があります。興味のある人は、減価償却の背後にある理由を読むことができますpyvenv

venv terminalコマンドを使用して新しい環境を作成するために使用されます。

$ python3 -m venv directory-name-to-create

でアクティブ化:

$ source name-given/bin/activate

単純に非アクティブ化:

$ deactivate

非アクティブ化した後で環境を完全に削除する必要がある場合は、次のコマンドを実行できます。

$ rm -r name-given

デフォルトでは、作成される環境は、使用しているPythonの現在のバージョンになります。ドキュメントを作成していて、正しいバージョンのPythonがリーダーによって使用されているという追加の安全性が必要な場合は、次のようにコマンドでメジャーバージョン番号とマイナーバージョン番号を指定できます。

$ python3.6 -m venv example-three-six

リーダーが3.6以外のバージョンを使用している場合、コマンドは成功せず、エラーメッセージに表示されます。ただし、どのパッチバージョン(たとえば3.6.4)でも機能します。

環境がアクティブな場合、pip通常どおりに任意のパッケージを環境にインストールできます。デフォルトでは、新しく作成された環境には、マシンにすでにインストールされているパッケージ含まれません。それpip自体が必ずしもマシンにインストールされるとは限りません。最初にpip、を使用して最新バージョンにアップグレードすることをお勧めしますpip install --upgrade pip

プロジェクトには通常requirements.txt、依存関係を指定するファイルがあります。これにより、shortcutコマンドpip install -r requirements.txtコマンドで、新しく作成された仮想環境にすべてのパッケージをすばやくインストールできます。それらは仮想環境にのみ存在します。非アクティブ化すると使用できなくなりますが、再アクティブ化すると存続します。

Python自体の追加バージョンを使用する必要がない場合は、これで、分離されたプロジェクト固有の仮想環境を作成できます。

pyenv

1台のマシンで複数のバージョンのPythonを使用する場合pyenvは、バージョンをインストールして切り替えるために一般的に使用されるツールです。これは、前述の減価償却されたpyvenvスクリプトと混同しないでください。Pythonにはバンドルされていないため、個別にインストールする必要があります。

pyenvドキュメントは、それがどのように動作するかの偉大な記述が含まれているので、ここで我々はそれを使用する方法で簡単に見ていきます。

まず、インストールする必要があります。Mac OS Xを使用している場合は、Homebrewを使用してこれを行うことができます。それ以外の場合は、他のインストールオプションを検討してください。

$ brew update $ brew install pyenv

次に、シェルスクリプトの下部に以下を追加して、pyenvバージョンを自動的に変更できるようにします。

eval "$(pyenv init -)"

これを行うには$ ~/.zshrc$ ~/.bashrcまたは$ ~/.bash_profileを使用して使用中のシェルスクリプトを開き、上記の行をコピーしてに貼り付けます。

実行pyenv versionsすると、現在インストールされているPythonバージョンが表示され、*次に現在使用されているバージョンが表示されます。pyenv versionこれを直接表示し、これpython --versionを確認するために使用できます。

追加のバージョンをインストールするには、たとえば3.4.0、を使用しますpyenv install 3.4.0

pyenv 4つの場所を調べて、使用するPythonのバージョンを優先順に決定します。

  1. PYENV_VERSION環境変数(指定されている場合)。pyenv shellこのコマンドを使用して、現在のシェルセッションでこの環境変数を設定できます。
  2. .python-version現在のディレクトリにあるアプリケーション固有のファイル(存在する場合)。コマンドを.python-version使用して、現在のディレクトリのファイルを変更できますpyenv local
  3. .python-versionファイルシステムのルートに到達するまで、各親ディレクトリを検索して最初に見つかったファイル(存在する場合)。
  4. グローバルバージョンファイル。このファイルは、pyenv globalコマンドを使用して変更できます。グローバルバージョンファイルが存在しない場合、pyenvは「システム」Pythonを使用することを想定しています。(言い換えると、pyenvがあなたの中になかった場合、どのバージョンでも実行されますPATH。)

Python 3.6.4を使用する新しいプロジェクトを設定すると、pyenv local 3.6.4そのルートディレクトリで実行されます。これにより、バージョンが設定され、.python-versionファイルが作成されるため、他の寄稿者のマシンがそれを取得します。

pyenvコマンドの完全な説明はブックマークするものです。

pyenvとvenv

Python 3.3以降を使用する場合、Pythonの異なるバージョンをインストールして切り替える方法と、新しい仮想環境を作成する方法の両方がわかりました。

例として、Python3.4を使用するプロジェクトを設定するとします。

まず、を使用してローカルバージョンを設定できますpyenv local 3.4.0

次に実行python3 -m venv example-projectするとexample-project、ローカルで有効になっているPython 3.4.0を使用して、の下に新しい仮想環境がセットアップされます。

を使用source example-project/bin/activateしてアクティブ化し、作業を開始できます。

次に、オプションで、共同編集者が使用する必要があることを文書化できますpython3.4 -m venv 。つまり、共同編集者がpyenvを使用していなくてpython3.4も、Pythonのバージョンが意図したとおりにメジャーバージョンとマイナーバージョン(3と4)が同じでない場合、コマンドはエラーになります。

または、3.4.0を使用するように指定して、指示することもできますpython3 -m venv 。私たちはどんなVEはと思われる場合はrsionグラムreater 3.4が許容されるよりも、我々はまた、使用することもできますpython3にわたりpython3.4協力者は3.6を使用していたかのように、彼らはそれ以外の場合は、エラーを受け取ることになります。これはプロジェクト固有の決定です。

pyenv-virtualenv

pyenvPython2と3の両方のバージョンをインストールするために使用できます。ただし、これまで見てきたようにvenv、3.3以降のバージョンのPythonに限定されています。

pyenv-virtualenvと統合された仮想環境を作成するためのツールpyenvであり、Pythonのすべてのバージョンで機能します。venv可能な場合は、公式のPythonを使用することをお勧めします。ただし、たとえば、に基づいて仮想環境を作成している場合、2.7.13これはを補完しますpyenv

condaすでにAnacondaおよびMiniconda環境を使用している場合は、それらの環境でもうまく機能します。と呼ばれるツールvirtualenvも存在します。ここでは取り上げませんが、最後にリンクされています。

インストール後、pyenv次にHomebrew(または代替)を使用して次のようにインストールできます。

$ brew install pyenv-virtualenv

あなたの次の.zshrc.bashrcまたは.bash_profile(あなたが使用しているシェルに応じて)底部に向かって次の行を追加します。

eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"

これによりpyenv、ディレクトリを移動するときに環境を自動的にアクティブ化および非アクティブ化できます。

新しい仮想環境を作成するには、次を使用します。

$ pyenv virtualenv   // for example $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

既存の環境は次のようにリストできます。

$ pyenv virtualenvs

有効化/非有効化:

$ pyenv activate  $ pyenv deactivate

執筆時点では、使用時activateに警告prompt changing will be removed from future releaseが表示されます。これは予期(env-name)されたものであり、activateコマンド自体の使用ではなく、シェルに表示されていることのみを指します。

インストール要件は、で説明されているように機能しvenvます。環境を削除するためにコマンドが必要ない場合とは異なりvenvrm -rコマンドはuninstall存在します。

最終的な考え

これら3つのツール間で、Pythonのバージョンや必要な依存関係に関係なく、任意のプロジェクトでコラボレーションすることができます。また、私たちが取り組んでいるプロジェクトで他の人が使用できるように、セットアップ手順を文書化する方法も知っています。

すべての開発者が3つすべてを必要とするわけではないため、セットを使用する理由もわかります。

これがお役に立てば幸いです。以下にリンクされているドキュメントと組み合わせると便利なリファレンスになります。

読んでくれてありがとう!?

私が探求した他のこと:

  • jest.mock()を使用したESおよびCommonJSモジュールのモック
  • AmazonのElasticContainerServiceの初心者向けガイド

リソース

  • Python仮想環境:入門書
  • 減価償却 pyvenv
  • Pythonvenvドキュメント
  • venv vs virtualenv
  • venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、pipenvなどの違いは何ですか?
  • インストールする必要がありpipますか?