Pip -tはシンプルなvirtualenvの代替です

TL; DR



プロジェクトの依存関係を単純にインストールして分離するために、 virtualenvは多くの場合、難しい決定です。 簡単な代替手段を提供します。

  1. ./.pip



    PYTHONPATH



    環境変数に追加します。
  2. pip install -t .pip



    を使用してパッケージをローカルにインストールします。
  3. プロジェクトフォルダーから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の機能を拡張して使いやすくするvirtualenvwrapperautoenvなどのパッケージがあります。 その他のソリューション: Anaconda environments



とPython標準ライブラリ(3.3+)のpyvenv。



これらはすべて優れたツールですが、単純で一般的なタスクに対してかなり重くて複雑なソリューションを提供するように思われました。



Javaの世界では、 npmBowerはシンプルで信頼性の高い強力なパッケージ管理を提供しますが、これはPythonには欠けているようです。 成功の鍵は、正しいバージョンの正しいライブラリをダウンロードし、プロジェクト内の特別なフォルダーに入れることです。 ダウンロードしたライブラリは、特定のプロジェクトにのみ適用されます。 これにより、上記の問題が自動的に解消されます。



純粋な魔法



PythonでnpmとBowerのアプローチを繰り返す簡単な方法があることがわかりました。



次に、プロジェクトフォルダーからコードを実行します。 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パッケージのシステムをクリーンアップする必要があります。



All Articles