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をインストールする
- MAC / LINUX
このコマンドは、標準のターミナルセッションに対して永続的にPYTHONPATHを設定します。
$ echo 'export PYTHONPATH="./.pip:$PYTHONPATH"' >> ~/.bash_profile
その後、ターミナルを再起動するか、$ source .bash_profile
実行して、PYTHONPATHがアクティブセッションで起動するようにします。 プラットフォームによっては、~/.bash_profile
を~/.bashrc
に置き換える必要がある場合があり~/.bashrc
。
- WINDOWS
コントロールパネルを開き、システムとセキュリティ→システム→設定の変更→詳細設定→環境変数に移動します(英語版を持っているので、誤って読者を混乱させないようにセクション名を翻訳していません 。 PYTHONPATH変数を追加または編集して、値が.\.pip;(...other paths...)
.\.pip
または.\.pip;(...other paths...)
ます。 ユーザーとシステム全体の両方に変数を設定できます。
- 一時的なPythonpath
セッションの期間のみPYTHONPATHを設定する場合は、MacおよびLinuxで$ export PYTHONPATH=./.pip
を実行するか、Windowsで> set PYTHONPATH=.\.pip
Pipを実行します。
MacおよびLinuxでは、Pythonセッションの期間のみPYTHONPATHを設定することもできます:$ PYTHONPATH=./.pip python main.py
ステップ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パッケージのシステムをクリーンアップする必要があります。