13

pipvirtualenv比べてとても素晴らしい音ですsetuptools。アンインストールできるのは素晴らしいことです。しかし、私のプロジェクトは既に を使用してsetuptoolsいます。移行するにはどうすればよいですか? これまでに見つけた Web サイトは、非常に曖昧で一般的なものです。そこで、主要な Web サイトを読んで試してみた後の質問のアンソロジーを次に示します。

  • まず第一に、今では使用可能な状態virtualenvpipなっているはずですか?そうでない場合は、残りを狂人の暴言として無視してください。
  • どのvirtualenvようにインストールする必要がありますか?他の場所で説明されているほど複雑であると信じる準備ができていません。
  • 仮想環境にmatplotlibをインストールする方法についてテスト済みの一連の手順はありますか? 何らかの理由で、単にパッケージをインストールするのではなく、常にここでコンパイルする必要があり、常に失敗に終わります (その後でもbuild-dep250 MB のディスク容量を占有しました)。たくさんの警告が表示された後、src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope.
  • どちらのツールも とどのように相互作用しsetup.pyますか? pipを置き換えることになってeasy_installいますが、それがドロップインなのか、それともより複雑な関係なのかは明らかではありません。
  • virtualenv は開発モード専用ですか、それともユーザーもインストールする必要がありますか?
  • 結果のパッケージは最小要件 (現在の卵のように) でインストールされますか、それともすべての依存関係のソースとバイナリ、およびすべてのビルド ツールと共にインストールされ、仮想環境でギガバイト モンスターを作成しますか?
  • 仮想環境にインストールされている場合、ユーザーはパッケージを変更して実行する必要が$PATHありますか?$PYTHONPATH
  • 昔のようにテキスト文字列からスクリプトを作成する必要がありますか?virtualenv
  • #egg=PackageURL 構文とは何ですか? これは標準の URL の一部ではないのに、別のパラメーターではないのはなぜですか?
  • @rev は URL のどこに含まれていますか? 最後に、私は推測しますが、ドキュメントはこれについて明確ではありません (「URL に @rev を含めることもできます」)。
  • 既存の要件ファイルを「新しいファイルの一種のテンプレートとして」使用することで理解されることは何ですか? これは、いくつものことを意味する可能性があります。
4

2 に答える 2

22

うわー、それはかなりの質問のセットです。それらの多くは、より詳細な独自のSO質問に値するでしょう。私は自分のベストを尽くします:

まず、virtualenvとpipは今では使える状態になっているはずですか?

はい、すべての人のニーズに応えるわけではありませんが。Pipとvirtualenv(およびPythonパッケージ管理の他のすべて)は完璧にはほど遠いですが、それでも広く使用され、依存しています。

virtualenvはどのようにインストールする必要がありますか?他の場所で説明されているように複雑であると信じる準備はできていません。

リンクする答えは複雑です。グローバルなPythonインストールに変更を加えることをまったく避け、~/.local代わりにすべてをインストールしようとしているからです。これにはいくつかの利点がありますが、セットアップがより複雑になります。また、 virtualenvwrapperもインストールされています。これは、virtualenvを操作するための便利なbashスクリプトのセットですが、virtualenvを使用する場合は必要ありません。

Ubuntuを使用している場合は、グローバルpython環境に損傷を与えることなくvirtualenvを正常にインストールできます(Ubuntu virtualenvパッケージもインストールされている場合を除きます。これは、古いバージョンである可能性が高いためお勧めしません)aptitude install python-setuptoolseasy_install virtualenv

仮想環境にmatplotlibをインストールする方法についてテストされた一連の手順はありますか?何らかの理由で、パッケージをインストールするだけでなく、常にここでコンパイルする必要があり、常に失敗して終了します(250 MBのディスクスペースを使用したbuild-depの後でも)。たくさんの警告の後、src / mplutils.cpp:17を出力します:エラー:'vsprintf'はこのスコープで宣言されていません。

pipは、設計上、ソースからのみインストールされ、コンパイル済みのバイナリはインストールされないため、「常にコンパイルしたい」。これは物議を醸す選択であり、おそらく、より純粋なPythonパッケージを使用し、動作するコンパイルチェーンが標準であるPOSIX環境で開発およびデプロイするPythonWeb開発者の間でpipが最も広く採用されている主な理由です。

設計を選択する理由は、プリコンパイルされたバイナリを提供すると、さまざまなプラットフォームとビルドアーキテクチャ(Pythonバージョン、UCS-2とUCS-4のPythonビルド、32ビットと64ビットなど)で組み合わせ爆発の問題が発生するためです。easy_installがPyPIの種類の作品で適切なバイナリパッケージを見つける方法は、ほとんどの場合ですが、これらすべての要因を考慮していないため、機能しなくなる可能性があります。したがって、pipはその問題を完全に回避します(コンパイル環境が機能しているという要件に置き換えます)。

多くの場合、Cコンパイルが必要なパッケージのリリーススケジュールも遅く、代わりにOSパッケージをインストールするだけでかまいません。ただし、これでは、異なる仮想環境でそれらの異なるバージョンを操作することはできません。

コンパイルエラーの原因はわかりません。この一連のコマンドで(Ubuntu 10.10で)機能します。

virtualenv --no-site-packages tmp
. tmp/bin/activate
pip install numpy
pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib

PyPIでのmatplotlibの異常なダウンロードURLのため、最新バージョンを取得するには「-f」リンクが必要です。

どちらのツールもsetup.pyとどのように相互作用しますか?pipはeasy_installを置き換えることになっていますが、それがドロップインなのか、より複雑な関係なのかは明確ではありません。

このsetup.pyファイルは、Python標準ライブラリのパッケージ管理「ソリューション」であるdistutilsの規則です。distutils単独ではいくつかの重要な機能が欠けています。setuptoolsは、distutilsを「採用および拡張」して、いくつかの追加機能を提供する、広く使用されているサードパーティのパッケージです。setuptoolsも使用しsetup.pyます。easy_installsetuptoolsにバンドルされているインストーラーです。Setuptoolsの開発は数年間停滞し、distributeは長年のバグを修正するためのsetuptoolsのフォークでした。最終的に、distributeをsetuptoolsにマージすることでフォークが解決され、setuptoolsの開発が再びアクティブになりました(新しいメンテナを使用)。

distutils2distutilsは、 setuptools / distributionから最高のアイデアを取り入れようとした、ほとんど書き直された新しいバージョンであり、Python標準ライブラリの一部になるはずでした。残念ながら、この取り組みは失敗したため、当面の間、setuptoolsはPythonパッケージのデファクトスタンダードのままです。

Pipはeasy_installを置き換えますが、setuptoolsを置き換えるものではありません。setuptoolsが必要で、その上にビルドされます。したがって、も使用しsetup.pyます。

virtualenvは開発モード専用ですか、それともユーザーもインストールする必要がありますか?

それに対する唯一の正しい答えはありません。どちらの方法でも使用できます。結局のところ、それは実際にはユーザーの選択であり、ソフトウェアは理想的にはvirtualenvの内部または外部にインストールできる必要があります。ただし、いずれかのアプローチを文書化して強調することを選択する場合もあります。それはあなたのユーザーが誰であるか、そして彼らがあなたのソフトウェアをインストールする必要があると思われる環境に大きく依存します。

結果のパッケージは最小要件(現在のeggなど)でインストールされますか、それともすべての依存関係とすべてのビルドツールのソースとバイナリでインストールされ、仮想環境にギガバイトのモンスターが作成されますか?

コンパイルが必要なパッケージがpip経由でインストールされている場合は、ソースからコンパイルする必要があります。これは、コンパイルが必要な依存関係にも当てはまります。

これは、virtualenvを使用するかどうかの問題とは関係ありません。easy_installvirtualenvでデフォルトで使用可能であり、そこでは問題なく動作します。virtualenvの外部と同じように、コンパイル済みのバイナリエッグをインストールできます。

仮想環境にインストールされている場合、結果のパッケージを実行するには、ユーザーは$PATHと$PYTHONPATHを変更する必要がありますか?

virtualenvにインストールされているものを使用するには、virtualenvのbin/ディレクトリにあるpythonバイナリ(またはこのバイナリを参照するvirtualenvにインストールされている別のスクリプト)を使用する必要があります。これを行う最も一般的な方法は、virtualenvactivateまたはactivate.batスクリプトを使用してシェルを一時的に変更しPATH、virtualenvのbin/ディレクトリが最初になるようにすることです。virtualenvでは、変更PYTHONPATHは一般的に有用または必要ではありません。

古き良き時代のように、virtualenvのテキスト文字列からスクリプトを作成する必要がありますか?

いいえ。

#egg = Package URL構文とは何ですか?これは標準のURLの一部ではないのに、なぜ別のパラメーターではないのでしょうか。

「#egg = projectname-version」URLフラグメントハックは、setuptoolsとeasy_installによって最初に導入されました。easy_installはWebからリンクを取得して、特定のパッケージ名とバージョンにインストールする候補のディストリビューションを見つけるため、このハックにより、パッケージの作成者は、ファイルにeasy_installの標準命名規則を使用していなくても、easy_installが理解できるリンクをPyPIに追加できました。 。

@revはURLのどこに含まれていますか?最後に私は推測しますが、ドキュメントはこれについて明確ではありません(「URLに@revを含めることもできます」)。

その引用された断片の後に数文あり、「他の機能について学ぶために要件ファイル形式を読む」へのリンクがあります。この@rev機能は完全に文書化されており、そこで実証されています。

既存の要件ファイルを「新しいファイルの一種のテンプレートとして」使用することで何が理解されるのでしょうか。これは、いくつものことを意味する可能性があります。

次の文は、「devel-req.txtにリストされているパッケージを順番に保持し、コメントを保持する」と述べています。より簡潔な説明が何であるかわかりません。

于 2011-03-03T19:52:37.393 に答える
4

すべての質問にお答えすることはできませんが、以下が役立つことを願っています。

virtualenvとの両方pipが非常に使いやすいです。多くの Python 開発者はこれらを毎日使用しています。

easy_install が動作しているので、両方をインストールする最も簡単な方法は次のとおりです。

easy_install pip
easy_install virtualenv

virtualenv をvirtualenv yourEnvName取得したら、入力するだけで、新しい python 仮想環境が という名前のディレクトリに取得されますyourEnvName

そこからは簡単source yourEnvName/bin/activateで、仮想 Python インタープリターがアクティブになります。私はmatplotlibについて何も知りませんが、奇妙なハードコーディングされたパスの問題がない限り、インストールの相互作用に従うことはうまくいくはずです。

経由で何かをインストールeasy_installできる場合は、通常、経由でインストールできますpipeasy_installできて、できなくて、できることは何も見つかりpipませんでした。

ユーザーがインストールできるとは考えていませんvirtualenv(ユーザーが誰であるかによって異なります)。技術的には、ほとんどの場合、仮想 Python インタープリターは実際のインタープリターとして扱うことができます。主な用途は、実際のインタープリターのサイト パッケージを乱雑にすることではなく、同じライブラリの異なる互換性のないバージョンを必要とする 2 つのライブラリ/アプリがある場合です。

あなたまたはユーザーが virtualenv に何かをインストールすると、他の virtualenv またはシステムの Python インタープリターでは使用できなくなります。source /path/to/yourvirtualenv/bin/activateコマンドを使用して、ライブラリをインストールした仮想環境に切り替える必要があります。

「新しいファイルの一種のテンプレートとして」とは、pip freeze -r devel-req.txt > stable-req.txtコマンドがstable-req.txt既存のファイルに基づいて新しいファイルを作成することを意味しますdevel-req.txt。唯一の違いは、既存のファイルでまだ指定されていないインストール済みのものはすべて、新しいファイルに含まれることです。

于 2011-02-13T02:06:10.237 に答える