38

私はPythonを初めて使用し、djangoを学ぶことを計画しています。私は(レールではなく)ルビーについて少し経験があり、RVMに精通していますが、 pythonbrewvirtualenvの違いを理解していません。pythonbrewがRVMの模倣であることは知っていますが、 virtualenvはすでにRVMが実行していることを実行していると思いました(またはその逆は、pythonbrewがすでにRVMが実行していることを実行しています)。誰かが私がそれを理解するのを助けるために説明し、おそらくいくつかの具体的な例/使用法を提供してもらえますか?どうもありがとう!

4

5 に答える 5

52

PythonbrewはRubyのrvmに似ています:これは次のことを可能にするシェル関数です:

  • Pythonの完全な自己完結型バージョンを1つ以上作成し、それぞれをホームディレクトリの下にローカルに保存します。この方法でPythonの複数のバージョンを構築できます。
  • Pythonのバージョンを簡単に切り替えることができます。

構築するPythonは互いに完全に分離されており、システム全体にインストールされているPythonのバージョンからは完全に分離されています。

Virtualenvは似ていますが、まったく同じではありません。これは、概念的には、既存のPythonインストール(通常はシステム全体のインストールですが、常にではありません)の上に配置されるPython仮想環境を作成します。デフォルトでは、Unixプラットフォーム(およびMac)では、さまざまなPythonライブラリモジュールへのシンボリックリンクが作成されるため、これらのモジュールを「実際の」基礎となるPython実装と文字通り共有しています。ただし、virtualenvには独自の「bin」ディレクトリと「site-packages」ディレクトリがあります。Python仮想環境に追加でインストールするものはすべて、その環境内でのみ使用できます。

Pythonbrewの利点の1つは、Pythonbrewが作成するPython環境が、完全に自己完結型であるということです。基盤となるベースインストールがないため、基盤となるベースPythonインストールで台無しになるもので汚染されることはありません。これはvirtualenv環境には当てはまりません。virtualenv Pythonを作成し、その上にあるベースPythonインスタンスをなんらかの方法で台無しにした場合(たとえば、rootとしてログインしているときにベースPythonの「site」ディレクトリの一部を誤って削除した場合)、virtualenv環境ベースを台無しにします。そのPythonでも。

ただし、virtualenvには独自の利点があります。おそらく最大の利点は、軽量であることです。PythonbrewはPythonを最初からコンパイルするため、その環境の1つを作成するには、PythonbrewPython環境の作成に時間がかかります。比較すると、virtualenvPython環境の作成は非常に高速です。

実際、それらを一緒に使用することができます。これがあなたがそれをしたいと思うかもしれない1つの状況です。

  • 基本システムはPython2.6を使用しています。
  • Python2.7をインストールする必要があります。
  • 何らかの理由で、Python2.7をシステム全体にPython2.6と並べてインストールすることはできません(またはしたくありません)。

このような場合、Pythonbrewを使用して、ホームディレクトリの下にベースPython 2.7をインストールできます。この場合、他の場所にインストールされているものと競合することはありません。次に、Pythonbrewでインストールされた2.7Pythonに基づく1つ以上の軽量virtualenvPython環境を作成できます。たとえば、virtualenvを使用して、Python2.7の短期間のテスト環境をそのように起動できます。

ほとんどの人が実際にそうしているとは思えません。(私はしません。)しかし、あなたができない理由はありません。

于 2011-12-01T21:18:47.960 に答える
4

PythonBrewについて聞いたことがないその価値については、virtualenvを知っています(そして大好きです)。

Virtualenvは、マシンにインストールされているPythonに基づいて、個別の環境を作成するために使用されます。つまり、Python 2.7を使用している場合、多数の分離されたpython 2.7環境を作成できますが、python2.6環境を作成することはできません。

これによると(私はグーグルで見つけました)Pythonbrewは他のPythonバージョンのインストールに焦点を合わせているようです。したがって、'brewを使用してpy2.6と2.7をインストールし、次にvirtualenvを使用してそれぞれの環境を作成すると思います。

または、'brewはvirtualenvを使用して環境を作成することもできるようです。

別のPythonインタープリターが実際には孤立した環境ではないのはなぜですか。

各Pythonインストールには、一連のパッケージがあります(「site-packages」に配置されていると思います)。新しいパッケージをインストールすると、このセットに追加され、すべてのPythonコードで使用できるようになります。

これは、Django0.96でビルドするプロジェクトが1つあり、Django1.3を使用して新しいプロジェクトを開始する場合に問題になる可能性があります。システムバージョンのDjangoを更新するだけの場合、古いプロジェクトにも影響します。

virtualenvsを使用すると、Django1.3で1つの環境を作成し、Django0.96で別の環境を作成できます。どちらもpython2.7です。古いプロジェクトをpython2.6で実行し、新しいプロジェクトをpython2.7で実行しても問題がなければ、それも可能ですが、Django-Trunkのdiffenretバージョンを使用する次の2つのプロジェクトはどうでしょうか。

于 2011-11-24T13:19:34.110 に答える
2

Python brewは、ビルドボットのように、ビルドとインストールを行うためのものです。私はあまりなじみがありません。Virtualenvは主に、異なるバージョンのpythonを入手した場合、またはシステム上のバージョンを乱さずにいくつかのパッケージを試したい場合に使用します。


わかりました、これは何かを明らかにします

分離されたPython環境を作成します(virtualenvを使用):

pythonbrew venv init
pythonbrew venv create proj
pythonbrew venv list
pythonbrew venv use proj
pythonbrew venv delete proj

http://pypi.python.org/pypi/pythonbrew/から

于 2011-11-24T12:40:06.470 に答える
1

上記の答えはすべてかなり古いので、ここで私の発見を要約したいと思います。私はrvm/rubyから来た後、これがPythonでどのように機能するかを理解しようとしていましたが、オンラインのどこにも明確な説明を見つけることができませんでした。

したがって、Macosには次のオプションがあります。

自作(MacOSのみ)

...インストールできpythonますpython3。それらはHomebrewのセラーに保存され、からシンボリックリンクされ/usr/local/binます。python現在、を使用してインストールされているデフォルトbrewは2.7.6です。

を使用してインストールされたパッケージpipは、デフォルトの場所に移動します(またpippip3シンボリックリンクされています)。

Pyenv(Pythonbrewの後継)

... Pythonの複数のバージョンをインストールして維持するHomebrew(Macos上)の代替方法です。LinuxにはHomebrewがないので、PyenvはPython専用のバージョンです。また、ソースからPythonを構築します。

Pyenvは、Pythonのインストールを維持し、~/.pyenv/versions/バイナリ(など)にすばやく切り替えて同じ名前を使用できるようにします。Pythonを模倣するなどの偽のバイナリである「shim」バイナリを使用し、代わりに実行を現在アクティブなバージョンにサイレントにリダイレクトします。pythonpippythonpip

を使用してインストールされたパッケージpipは、アクティブなPythonインストールに入ります。

したがって、これらの方法はどちらも、プロジェクトごとに個別のPythonインストールパッケージバージョンセット(rvmがgemsetで行うように)を維持するのに十分ではありません。したがって:

Virtualenv

...rvmに最も近いものです。この投稿を引用するには:

プライマリPythonインストールからファイルをコピーまたはリンクして新しいbinおよびlibディレクトリを作成することにより、新しいディレクトリにPythonのクリーンコピーを設定します

そのため、現在アクティブなPythonのコピーを使用して、別のディレクトリにコピーします。これらの環境を管理し、同じようvirtualenvwrapperに自動的にアクティブ化する機能を追加します。cdrvm

これにより、各プロジェクトに使用されるインストール済みのPythonバージョンとライブラリを分離できます。pythonただし、バージョン自体はインストールされません。

したがって、ほとんどの人がpyenv+virtualenvまたはbrew+の組み合わせを使用しているように聞こえますvirtualenv(もちろん、brewはMacos固有です)。最初の部分は(必要に応じて)Pythonバージョンをインストールするために使用され、2番目の部分は異なるプロジェクト用にそれらを複製して切り替えるために使用されます。

PS:私はそれを理解し始めたばかりです、ここで何かが間違っているなら私を訂正してください。

PPS:pyenvとvirtualenvを1つの屋根の下で組み合わせることで、このビジネス全体を改善できるように思えます...

于 2014-02-23T09:34:29.987 に答える
0
"pythonbrew is a program to automate the building and installation 
 of Python in the users $HOME."

対照的に、virtualenvは、プロジェクトを開発するための分離された環境を提供します。これにより、そのプロジェクトのすべてのライブラリが1つの場所に保持され、プロジェクトの再配置(および展開)がはるかに簡単になります。

于 2011-11-24T12:09:32.507 に答える