web-dev-qa-db-ja.com

virtualenvとpyenvの関係は何ですか?

私は最近、ワークフローでvirtualenvとvirtualenvwrapperを使用する方法を学びましたが、pyenvがいくつかのガイドで言及されているのを見てきましたが、pyenvが何であり、virtualenvとどのように異なる/類似しているのか理解できませんpyenvは、virtualenvのより良い/新しい代替物ですか、それとも無料のツールですか?後者の場合はどう違うのか、2つ(および該当する場合はvirtualenvwrapper)はどのように連携するのですか?

149
truth1ness

Pyenvvirtualenvは、さまざまな方法で機能する非常に異なるツールです異なるもの:

  • Pyenvはbash拡張機能です-Windowsでは機能しません-Python、pipなどへの呼び出しをインターセプトして、それらのいくつかのシステムpythonツールチェーン。そのため、選択したpythonバージョンにインストールしたすべてのライブラリが常に利用可能です。したがって、異なるバージョンのpythonを切り替える必要があるユーザーに適しています。

  • VirtualEnv、純粋なpythonですので、どこでも動作し、オプションで特定のバージョンのコピーを作成しますof、pythonと、現在のシステムツールチェーンへのリンクを含む場合と含まない場合があるアクティベート環境のローカルpip。ライブラリの既知のサブセットのみをインストールできない場合その環境。そのため、exactlyご存じのように、どのバージョンでどのライブラリが使用され、グローバルな変更が影響を与えないかは、テストと展開の方がほぼ確実に優れていますモジュール。

venvpython> 3.3

Python 3.3以降からvenvと呼ばれるVirtualEnvの組み込み実装があることに注意してください(一部のインストールでは、pyvenvというラッパーがあります。このラッパーは Python 3.6で非推奨です) )、おそらく好みで使用されるべきです。ラッパーで発生する可能性のある問題を回避するには、/path/to/python3 -m venv desired/env/pathを使用して直接使用するか、py -3 -m venv desired/env/pathを使用するウィンドウで優れたpy pythonセレクターを使用することをお勧めします。 desired/env/path configureで指定されたディレクトリを作成し、適切に設定します。一般に、VirtualEnvを使用するのと非常によく似ています。

追加のツール

上記の1つまたは複数の使用を支援できるため、言及して検討する価値のあるツールがいくつかあります。

  • VirtualEnvWrapper VirtualEnvの使用と管理を管理および簡素化する-Cross Platform
  • pyenv-virtualenvpyenv-installerによってインストールされ、VirtualEnvを管理およびインターフェースするためのPyEnvツールを提供します-これでpythonの複数のバージョンを含む基本インストールを作成し、それぞれに分離環境を作成できます-Linux/OS-XJohann Visagie提案
  • PyInstaller は、おそらくVirtualEnvで開発およびテストされたpythonコードを取得し、それをバンドルして、pythonのバージョンがインストールされています-WindowsのインストールなどをビルドするためにWindows(仮想)マシンが必要なクロスコンパイラではないことに注意してください。 pythonはインストールされますが、pythonのバージョンとすべてのライブラリがコードと互換性があることは確認できません。
145
Steve Barnes

virtualenvを使用すると、カスタムPythonインストールを作成できます。プロジェクトのサブディレクトリ内。したがって、各プロジェクトは、それぞれのvirtualenvの下に独自のpython(または複数)を持つことができます。一部/すべてのvirtualenvが競合せずに同じバージョンのpython(例:2.7.16)を持っていることさえ完全に問題ありません-それらは別々に住んでいてお互いを知りません。これらのpythonのいずれかを使用する場合は、activateを使用する必要があります(PATHを一時的に変更するスクリプトを実行して、virtualenvのbin/ディレクトリが最初に来るようにします)。その時点から、python(またはpipなど)を呼び出すと、deactivatePATHを復元する)までそのvirtualenvのバージョンが呼び出されます。

pyenvは、virtualenvよりも広範なスケールで動作します。Pythonインストールのレジスタを保持し(新しいインストールに使用できます)、Pythonのどのバージョンを実行するかを構成できます。 pythonコマンドを使用します。似ていますが、実際の使用は少し異なります。それは、そのshim pythonスクリプトをPATHの前に(永続的に)追加し、次にどの「実際の」pythonを呼び出すかを決定することによって機能します。 (pyenv-virtualenvプラグインを使用して)virtualenv pythonの1つを呼び出すようにpyenvを構成することもできます。 Python pyenvを使用してインストールするバージョンは、その$(pyenv root)/versions/ディレクトリ(デフォルトでは、pyenvルートは〜/ .pyenv)に移動するため、virtualenvよりも「グローバル」です。通常、pyenvを介してインストールされたPythonバージョンを複製することはできません。少なくともそうすることは主要なアイデアではありません。

特定のPythonバージョンを使用してvirtualenvを作成するには、そのバージョンをシステムのどこかに(PATH上にあるかどうかに関係なく)、新しく作成したvirtualenvにクローンする必要があります。もちろん、特定のバージョンを取得する1つの方法は、pyenvを介してインストールすることです。それが完了すると、異なるモジュール(またはそのバージョン)をインストールすることにより、個々のvirtualenvを自由に発散させることができます。

要するに:

  • virtualenvを使用すると、既存のものからクローンを作成して、ローカルの独立したpythonインストールを作成できます。
  • pyenvを使用すると、異なるバージョンのpythonを同時に(システム全体またはローカルユーザー用に)インストールし、任意の時点で実行する多数のpythonを選択できます(virtualenvまたはアナコンダ)
11
Blazej Czapp