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パッケージのシステムをクリーンアップする必要があります。