うわー、それはかなりの質問のセットです。それらの多くは、より詳細な独自のSO質問に値するでしょう。私は自分のベストを尽くします:
まず、virtualenvとpipは今では使える状態になっているはずですか?
はい、すべての人のニーズに応えるわけではありませんが。Pipとvirtualenv(およびPythonパッケージ管理の他のすべて)は完璧にはほど遠いですが、それでも広く使用され、依存しています。
virtualenvはどのようにインストールする必要がありますか?他の場所で説明されているように複雑であると信じる準備はできていません。
リンクする答えは複雑です。グローバルなPythonインストールに変更を加えることをまったく避け、~/.local
代わりにすべてをインストールしようとしているからです。これにはいくつかの利点がありますが、セットアップがより複雑になります。また、 virtualenvwrapperもインストールされています。これは、virtualenvを操作するための便利なbashスクリプトのセットですが、virtualenvを使用する場合は必要ありません。
Ubuntuを使用している場合は、グローバルpython環境に損傷を与えることなくvirtualenvを正常にインストールできます(Ubuntu virtualenvパッケージもインストールされている場合を除きます。これは、古いバージョンである可能性が高いためお勧めしません)aptitude install python-setuptools
。easy_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_install
setuptoolsにバンドルされているインストーラーです。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_install
virtualenvでデフォルトで使用可能であり、そこでは問題なく動作します。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にリストされているパッケージを順番に保持し、コメントを保持する」と述べています。より簡潔な説明が何であるかわかりません。