Ubuntu + virtualenv =混乱? virtualenvはdist-packagesを嫌い、site-packagesを望んでいます

StackOverflow https://stackoverflow.com/questions/1215610

質問

誰かが、ubuntu 9.04でpythonで何が起こっているのか説明してもらえますか?

virtualenv を起動しようとしていますが、-no-site-packages フラグはubuntuでは何もしないようです。 easy_install setuptools 0.6c9 にアップグレード)で virtualenv 1.3.3 をインストールしましたが、すべてがにインストールされているようです/usr/local/lib/python2.6/dist-packages

私は、apt-getを使用してパッケージをインストールすると、 /usr/lib/python2.6/dist-packages / に配置されると仮定しますか?

問題は、 /usr/local/lib/python2.6/site-packages が存在するだけでなく、空のままになっていることです。 ( virtualenv path を見ると)これは、virtualenvがバックアップとして使用するフォルダーのようです。したがって、-no-site-packages を省略したと思っても、virtualenvのいずれからもローカルシステムパッケージにアクセスできません。

だから私の質問は:

  1. virtualenv dist-packages の1つを指すようにするにはどうすればよいですか?
  2. どの dist-packagesを指すべきですか? /usr/lib/python2.6/dist-packages または /usr/local/lib/python2.6/dist-packages /
  3. /usr/lib/python2.6/site-packages のポイントは何ですか?そこには何もありません!
  4. パス上で先着順ですか? /usr/local/lib/python2.6/dist-packages / に新しいバージョンのパッケージXYZをインストールし、の古いバージョン(ubuntu repos / apt-getから)をインストールした場合/usr/lib/python2.6/dist-packagesimport xyz をインポートするとどのファイルがインポートされますか?これはパスリストに基づいていると思いますか?
  5. なぜこれが非常に混乱しているのですか?ここに足りないものはありますか?
  6. easy_install /usr/local/lib/python2.6/dist-packages にインストールすることはどこで定義されていますか?
  7. これは pip にも影響しますか?

これを解決できる人に感謝します!

役に立ちましたか?

解決

site-packagesをdist-packagesへのリンクにすることでハッキングしたいと思いますが、ubuntu dist以外の拡張機能をインストールする他のケースに影響を与える可能性があります。 virtualenvのソースを調整する以外は、1に対する別の答えは考えられません(ubuntuとvirtualenvの両方が非常に人気があるので、調整されたバージョンがすでに存在することに驚かないでしょう)。

Re 2、/ usr / local / bin / pythonを使用している場合は、/ usr / localバージョンのlib(サイトパッケージを含む)を使用し、逆に/ usr / bin / pythonを使用している場合。

再3、ソースから(easy_installまたはubuntuのディストリビューションからではなく)/ usr / bin / pythonの拡張機能をインストールした場合、そこに何かがあります。

再4、はい、パス上の以前のエントリが優先されます。

Re 5、easy_installはその名前だけで簡単です-私たちのpythonコミッターの間のコンセンサスは利便性のための深い暗い魔法であるため、その便利さにもかかわらず標準のpythonライブラリから慎重に除外されているほど多くの暗い魔法をします「簡単」表面のみ。

再6、それはeasy_installに対するubuntuの修正だと思います-そうであれば、Canonicalや他のubuntuのメンテナーが集合的な決定をする場所ならどこでも定義されます。

再7、申し訳ありませんが、わからない-確認できる最新のUbuntuが手元にありません。

他のヒント

virtual-envメーリングリストが最高のようです。 OPが両方の場所でこの質問を公開していることに注意してください。

メールのオリジナルコンテンツ:

Debianは/ usr / local / lib / pythonVERSION / site-packagesを作成し、 Pythonバイナリをコンパイルしてデフォルトの検索に含める パス。 Ubuntuは通常どおりDebianのリードに従いました。 Python 開発者はこれを好まなかった 同じサイトパッケージを使用してローカルにインストールされた/ usr / local / bin / python ディレクトリ。 Ubuntuはついにサイトパッケージを放棄して使用することを決定しました 代わりにdist-packages、彼らが発明した名前なので、 何かに干渉します。ローイングストーリーはどこかにあります あなたはそれをグーグル、Pythonバグトラッカーまたはdistutils SIGのどこかで など。

少なくともUbuntuのvirtualenvパッケージを使用している場合、システムは動作します。 一部の人々は、ローカルにインストールされたvirtualenvの使用で問題を抱えています Ubuntuは、魔法のsys.pathエントリが追加されていなかったため、または 何か。 --no-site-packagesがわからない そのオプション:私はUbuntuパッケージからPILとmysqldbを実行します Cの依存関係をコンパイルするのが難しい場合があります。 (必要 右ヘッダーファイル、Pythonはヘッダーファイルなどを無視しています)

Ubuntu Pythonパッケージは / usr / lib / pythonVERSION / dist-packages。またはそのPythonサポート 何らかの理由でディレクトリ。ローカルにインストールされたPythonパッケージは デフォルトでは/ usr / local / lib / pythonVERSION / dist-packages。いつでも 実行するUbuntu 9.04システムをインストールします。

$ sudo apt-get install python-setuptools(6.0c9) $ sudo apt-get install python-virtualenv(1.3.3) $ sudo easy_install pip $ sudo pip install virtualenvwrapper

virtualenvはこの方法で正常に機能しますが、-no-site-packagesを試したことはありません。

  

virtualenvと--no-site-packagesフラグを起動しようとしています   Ubuntuでは何もしないようです。 virtualenv 1.3.3をインストールしました   easy_install(setuptools 0.6c9にアップグレードしました)

これらのバージョンはどちらもUbuntu 9.04に含まれているため、より難しくしています 自分でローカルにインストールしてください。

  

およびすべて   /usr/local/lib/python2.6/dist-packagesにインストールされているようです

はい

  

apt-getを使用してパッケージをインストールする場合、/に配置されると仮定します   usr / lib / python2.6 / dist-packages /?

はい

  
      
  1. パス上で先着順ですか?新しい人がいる場合   /usr/local/lib/python2.6/dist-にインストールされているパッケージXYZのバージョン   packages /および/ usr / lib /内の古い(ubuntu repos / apt-getから)   python2.6 / dist-packages、xyzをインポートするとどれがインポートされますか?   これはパスリストに基づいていると思いますか?
  2.   

sys.pathは順番にスキャンされます。唯一面白いのは、.pthの卵 一部の人々が予想するよりも先に、または後でパスに入れます。しかし、もし あなたはそれができることすべてにピップを使用しています(つまり、ピップをインストールすることを除いて 自体、プリコンパイルされた卵、およびローカルディレクトリのスナップショット 卵リンクではなくコピー)、とにかく多くの.pth卵はありません。

  
      
  1. なぜこれが非常に混乱しているのですか?私は何かありますか   ここにありませんか?
  2.   

十分に文書化されていません。私はウェブをスキャンしてそれを見つけました。

  
      
  1. これはpipにも影響しますか?
  2.   

はい、pipは自動的にインストールされます / usr / local / lib / pythonVERSION / site-packages。 " pip install -Eを使用します $ VIRTUAL_ENVパッケージ名" virtualenvにインストールします。

システム管理ツールを構築する場合、または新しいシステムサービスと見なされるものを構築する場合を除き、UbuntuのPythonインストールに実際に触れてはいけません。

Ubuntuを使用してPythonアプリケーションを開発またはデプロイする場合は、常にソースから独自のPythonをビルドし、tarを作成して、デプロイメントに使用します。これにより、すべてのディレクトリが適切な場所に配置され、virtualenvが正常に機能します。サーバーに複数のPythonアプリをデプロイする場合は、Pythonを / home / python / opt / python などの場所、またはホームディレクトリの外部に配置します。 。開発者グループ( users ?)の書き込み権限があることを確認して、人々が簡単にパッケージを追加できるようにします。

これにより、2層のパッケージを作成することもできます。社内標準ツールであるものはPythonディストリビューションにインストールして、展開するtarballの一部にすることができ、アプリ固有のパッケージのみがvirtualenvに含まれます。

PythonをインストールしたUbuntuシステムをアップグレードまたは変更しないでください。

まあ、Ubuntu 9.04を持っているので、すぐにサイトパッケージとそうでないものの2つのサンドボックスをセットアップしてみました。そして、物事はうまく機能しています。

私が取ったアプローチの唯一の違いは、Ubuntuのpython-virtualenvパッケージ(1.3.3)を使用したことです。また、Ubuntuのセットアップに合わせてUbuntuチームによって調整されていると仮定します。

しばらくの間、easy_installed virtualenvを無効にすることを要約するには、パッケージ化されたpython-virtualenv を使用して、期待どおりかどうかを確認します。

実際、問題なく本番用に同様のセットアップを使用しています。残りはすでにアレックスによって回答されています。

別の修正方法:
https://stackoverflow.com/a/17265840/202168

各virtualenvで必要な場所でそれを行うことを忘れないでくださいが、ハッキングやvirtualenvの特別なバージョンに依存しません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top