TL; DR
プロジェクトの依存関係を単純にインストールして分離するために、 
virtualenvは多くの場合、難しい決定です。 簡単な代替手段を提供します。
- ./.pipを- PYTHONPATH環境変数に追加します。
- pip install -t .pipを使用してパッケージをローカルにインストールします。
- プロジェクトフォルダーからpythonを実行します。
今日はどのバージョンが必要ですか?
依存関係のインストールは、ほとんどすべてのPythonアプリケーションにとって必須です。 各アプリケーションは異なるライブラリに依存しています。正しい動作を保証するには、正確に正しいライブラリバージョンをインストールすることをお勧めします。
一般的な方法は、 
requirements.txtファイルをプロジェクトに含めること
requirements.txt 。 このファイルには、プロジェクトが依存するすべてのライブラリとバージョン番号がリストされています。 ファイルが適切な場所にある場合、依存関係のインストールは簡単です。
 $ pip install -r requirements.txt 
これまでのところ良い。 
依存関係が競合するプロジェクトが
2つ以上ある場合、問題が発生します。 プロジェクトAがライブラリXバージョン0.1、プロジェクトB 0.2でのみ動作するとします。 デフォルトでは、pipはライブラリをPythonインタープリターフォルダーにグローバルにインストールします。 つまり、 
$ pip install X==0.2コマンドは、 
すべてのプロジェクトにXバージョン0.2ライブラリをインストールし、バージョン0.1が既にインストールされている場合は上書きします。 AとBを切り替えると、毎回Xをグローバルに再インストールすることになり、長くて不便です。
太陽の下の島
この一般的な問題に対する一般的なソリューションは、 
仮想環境です。 
virtualenvフレームワークは、孤立したPython環境を作成します。 各プロジェクトの依存関係は互いに分離されています。 どういうわけか、virtualenvは一部のユーザーにとって複雑すぎるようです。 したがって、 
virtualenvの機能を拡張して使いやすくする
virtualenvwrapperや
autoenvなどのパッケージがあります。 その他のソリューション: 
Anaconda environmentsとPython標準ライブラリ(3.3+)のpyvenv。
これらはすべて優れたツールですが、単純で一般的なタスクに対してかなり重くて複雑なソリューションを提供するように思われました。
Javaの世界では、 
npmと
Bowerはシンプルで信頼性の高い強力なパッケージ管理を提供しますが、これはPythonには欠けているようです。 成功の鍵は、正しいバージョンの正しいライブラリをダウンロードし、プロジェクト内の特別なフォルダーに入れることです。 ダウンロードしたライブラリは、特定のプロジェクトにのみ適用されます。 これにより、上記の問題が自動的に解消されます。
純粋な魔法
PythonでnpmとBowerのアプローチを繰り返す簡単な方法があることがわかりました。
- ./.pipを- PYTHONPATHに追加し、
- パッケージをローカルにインストールするには、 -t .pipを-t .pipしてpipを使用します。
次に、プロジェクトフォルダーからコードを実行します。 
source env/bin/activateと
deactivate忘れてください!
./.pipは相対パスであるため、フォーカスが機能します。 その結果、 
~/dev/project_aから
pythonを実行すると、このPythonインスタンスのライブラリフォルダーのリストに
~/dev/project_a/.pip含まれます。 
~/dev/project_b pythonを実行します
~/dev/project_b/.pipます。 レセプションは、すべての一般的なプラットフォーム(Linux、Mack、Windows)で機能します。
もちろん、 
.pipフォルダーの名前は
.pipです。 
pip_componentsまたは
libs pip_components人
libsます。 ただし、 
.pip高速に印刷され、先頭のドットはLinuxおよびMacでフォルダーを非表示にします。
ステップ1:PYTHONPATHをインストールする
ステップ2: pip -tを使用してパッケージをインストールする
PYTHONPATHがインストールされたので、pipを使用して適切な場所にパッケージをインストールするだけです。 これを行うには、 
-tまたは
--target使用します。
 $ cd project_a project_a$ pip install requests==2.7.0 -t .pip project_a$ python >>> import requests >>> requests.__version__ '2.7.0' 
異なるバージョンの別のプロジェクトで同じこと:
 $ cd project_b project_b$ pip install requests==2.6.0 -t .pip project_b$ python >>> import requests >>> requests.__version__ '2.6.0' 
requirements.txtファイルですべてが同じように機能します:
 $ pip install -r requirements.txt -t .pip 
潜在的な待ち伏せ
さまざまなPythonインタープリター
別のPythonインタープリターでプログラムを簡単に実行できます。
 $ /path/to/python main.py 
ただし、 
2to3を使用したインストール中にソースコードをコンパイルするパッケージを使用する場合、Python 2と3の切り替えには問題があります。 このようなパッケージには単一のコードベースがありません;インストール中に、コードはPythonのアクティブバージョンに従って生成されます。
この場合、 
.pip3などのフォルダーを作成し、Python 3コードを実行するときにPYTHONPATHの先頭に追加します。
easy_install
easy_installでパッケージをグローバルにインストールしている場合、問題が発生します:easy_installはsys.pathの先頭にそのようなパッケージへのパスを追加するため、 
sys.pathからのパッケージよりも優先されます。
解決策は、easy_installを通じてグローバルにインストールされたパッケージを取り除くことです。
.pipの使用を妨げるものがないことを確認するには、Pythonで
import sys;sys.path実行します。 
./.pip前に他のパス
./.pip場合、最初にグローバルeasy_installパッケージのシステムをクリーンアップする必要があります。