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


175

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


3
fgimian.github.io/blog/2014/04/20/…ただし、いくつかの重要な利点を持つpyenvと呼ばれる別の方法があります。
Martijn Pieters

11
私のようになってpyenv混乱しないでくださいpyvenv
ユーザー

回答:


162

Pyenvvirtualenvは非常に異なるツールであり、さまざまな方法でさまざまなことを実行します。

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

  • VirtualEnvは純粋なpythonであるため、どこでも機能し、オプションで特定のバージョンの pythonとpipのコピーをアクティブ化環境にローカルに作成します。これには、現在のシステムツールチェーンへのリンクが含まれる場合と含まれない場合があります。ライブラリの既知のサブセットのみをその環境にインストールします。そのため、どのライブラリでどのバージョンが使用されているかを正確に把握しており、グローバルな変更がモジュールに影響を与えることはないため、テストと展開にはほとんど間違いなく優れています。

venv python> 3.3

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

追加のツール

上記の1つ以上の使用に役立つため、言及して検討する価値のあるいくつかのツールがあります。

  • VirtualEnvWrapper VirtualEnv- Cross Platformの使用と管理を管理および簡素化します。
  • pyenv-virtualenvのによってインストールさpyenv-インストーラあなたのpythonの複数のバージョンが含まれて基本インストールを持ち、それらのそれぞれの内部に独立した環境を作成することができ、これに- - VIRTUALENVに管理し、インタフェースするためPyEnvのツールを提供し、Linuxの/ OS- XJohann Visagieの提案
  • PyInstallerは、Pythonコードを取得し、VirtualEnvで開発およびテストし、それをバンドルして Pythonのバージョンがインストールされていないプラットフォームを実行できるようにします。これは、Windows(仮想-)Windowsインストールなどを構築するためのマシンですが、Pythonが確実にインストールされても、Pythonのバージョンとすべてのライブラリがコードと互換性があるとは限らない場合でも便利です。

3
pyenvとvirtualenvがシームレスに連携して動作できるようにするpyenvプラグインであるpyenv-virtualenvについて言及することはおそらく価値があります。pyenv-installerを使用してpyenvをインストールした場合、pyenv-virtualenvはすでに存在しています。* github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv

1
どうですか venv、今標準ライブラリの?
Flimm 2017年

@Flimm:Python 3.3以降のvenvは標準ライブラリの一部であり、virtualenvの代わりに使用する必要があります。これは、「virtualenv done right」と頻繁に説明されているためです。reddit.com/ r / learnpython / comments / 4hsudz / pyvenv_vs_virtualenv
Steve Barnes

2
pyenv-virtualenvはlinuxだけではありません(または少なくとももうなくなっています)。MacOSに簡単にインストールするための自作パッケージがあります。
回転

相互運用性を強調していただきありがとうございます。
HashRocketSyntax

16

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

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

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

要するに:

  • virtualenv 既存のものからクローンすることにより、ローカルで独立したPythonインストールを作成できます
  • pyenv 異なるバージョンのpythonを同時にインストールし(システム全体またはローカルユーザーのみ)、特定の時間に実行する多数のpython(virtualenvまたはAnacondaによって作成されたものを含む)を選択できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.