Python パッケージは、Python 言語のコア機能を拡張・強化するモジュール (再利用可能なコード) のコレクションです。 Python 開発者は、公式の Python Package Index (PyPI) リポジトリに貢献し、オープン ソース ライセンス条項の下で Python コミュニティにパッケージを提供しています。 Python Packaging Authority (PyPA) はリポジトリを管理し、Python パッケージの構築、配布、およびインストール用のツールの標準セットを維持します。

Indiana University の研究用スーパーコンピュータでは、多くのサードパーティ製パッケージがすでにインストールされて、一般的に使用する Python ビルドを補足しています。 もし、まだインストールされていないサードパーティの Python パッケージを独自に必要とする場合、 pipsetup.py を使ってホームディレクトリにパッケージをインストールすることができます。 まだインストールされていないPythonパッケージを使いたいという研究者が何人かいる場合は、システム全体のサイトパッケージとしてインストールするよう依頼することができます。

このページで紹介しています。

  • 個人用 Python パッケージのインストール
    • ユーザー環境の設定
    • パッケージを pip でインストール
    • パッケージの setup.py を使ってインストールする script
  • Understand module search order

Install Python packages for personal use

Set up your user environment

The Python packages to install the cython, は、ユーザー環境にPythonを追加しておく必要があります。 Carbonateでは、Pythonはデフォルトでユーザ環境に追加されています。 Big Red 3 では、または以前に Python を削除した場合、以下の手順で Python をユーザ環境に追加してください:

  1. どのモジュールが現在ロードされているかを確認します。
     module list
  2. 現在ロードされているモジュールのリストに Python がない場合、module loadコマンドを使用して追加します。
    • デフォルトのバージョンを追加するには、コマンドラインで次のように入力します。
       module load python
    • デフォルトでないバージョンを追加するには、次のように入力します。
      1. どのバージョンが利用可能か確認します; コマンドラインで、次のように入力します。
         module avail python
      2. 優先バージョンを読み込む: コマンドラインで、次のように入力します (version_number を優先バージョン番号に置き換えます)。
         module load python/version_number
  3. 現在ロードされているモジュールに Python が含まれていて、他のバージョンを使いたい、あるいは使う必要がある場合、他のバージョンをロードする前に現在ロードされているモジュールを削除しなければなりません。 これを一つのコマンドで行うには module switch を使用します。例えば、コマンドラインで次のように入力します (current_version を現在ロードされている python モジュールのバージョン番号に、new_version を希望するバージョン番号に置き換えてください)。
     module switch python/current_version python/new_version

環境を永久に変更するには、~/.modules ファイルを編集してください。 詳しくは、Use a .modules file in your home directory to save your user environment on an IU research supercomputer.

Use Modules to configure your user environment の詳細については、Use Modules to manage your software environment on IU’s research supercomputers.See.Your Home directory for the more to see.Modules for use Modules to configure your user environment を参照してください。

パイプを使ってパッケージをインストールする

パッケージ管理ツールは Python Package Authority (PyPA) が保守する標準ツールの一つで、Python Package Index (PyPI) リポジトリからパッケージをインストールするために推奨されるツールです。

PyPI リポジトリからパッケージ (例えば foo) をインストールするには、pip install コマンドに --user フラグを付けてください; 例えば:

--user オプションは pip に対して、パッケージのソースディストリビューションをダウンロードし (例えば foo) 実行中の Python に対してユーザ site-packages ディレクトリで解凍するように指示します; 例えば、このように。

 ~/.local/lib/python3.6/site-packages/foo

Python は自動的にこのディレクトリを検索してモジュールを探すので、環境変数 PYTHONPATH にこのパスを前置する必要はありません。

--user オプションを省略した場合、pip はパッケージをグローバルな site-packages ディレクトリ (必要なパーミッションがない場所) にインストールしようとし、その結果インストールは失敗します。py script

PyPI リポジトリ以外から Python パッケージをインストールするには、ソース配布物を自分でダウンロードして解凍し、その setup.py スクリプトを使ってユーザー site-packages ディレクトリにパッケージをインストールすることができます。

--user オプションは、setup.py にパッケージ (例えば foo) を実行中の Python のユーザ site-packages ディレクトリにインストールするように指示します。

--user オプションを省略した場合、setup.py はパッケージをグローバルな site-packages ディレクトリ (必要なパーミッションがない場所) にインストールしようとし、その結果インストールは失敗します。

あるいは、--home または --prefix オプションを使用して、パッケージを (必要なパーミッションのある) 別の場所にインストールすることができます。例えば、パッケージをサブディレクトリ (例えば python-pkgs) にインストールすることができます。

注意:
もしパッケージをユーザディレクトリ site-packages 以外の場所にインストールするなら、PYTHONPATH 環境変数の前にそのディレクトリへのパスを追加する必要があります。 PYTHONPATH については、以下の PYTHONPATH と python import の順番を参照してください。

パッケージをインストールするための setup.py の使用については、 Python モジュールのインストール (レガシーバージョン) を参照してください。

Understand the module search order

Python インタープリタが import 文にどう反応するかを知ることは、正しいバージョンがインストールされていて、その場所へのパスが PYTHONPATH 環境変数にリストされているのに、なぜ特定のモジュールやパッケージがロードされないのか、なぜパッケージの予想外のバージョンがロードされているのかを判断する助けになります。

Python は起動時に sys.path で見つかったパスを検索します。これは、インタープリタのモジュールの検索パスを決定するディレクトリのリストです。 変数 sys.path は以下の場所からこの順序で初期化される。

  1. Python インタープリタを起動するために使われたスクリプトを含むディレクトリ (インタープリタが対話的に起動されたり、スクリプトが標準入力から読まれた場合、この最初の項目 path は空のままであり、これは Python に現在の作業ディレクトリのモジュールを最初に検索するように指示する)
  2. PYTHONPATH
  3. でリストされているディレクトリ

  4. 実行中の Python インストールに対するバージョン固有の site-packages ディレクトリ、例えば。
     <sys.prefix>/lib/pythonX.Y/site-packages

    この例では、<sys.prefix> は実行中の Python インストールへのパス、X.Y は実行中の Python インストールのバージョン番号(例:3.8)です。

デフォルトでは、Python は初期化時に site.py モジュールもインポートし、モジュール検索パス (sys.path) にサイト固有のパス、例えばホームディレクトリ内のユーザー site-packages ディレクトリへのパスも追加します (X.Y は、起動している Python のバージョン番号になります)。

 ~/.local/lib/pythonX.Y/site-packages

site.pysys.path にパスを追加するとき、パス設定 (.pth) ファイルがスキャンされ、その中に sys.path に追加されるディレクトリが含まれていることがわかります。 もしディレクトリが複数の .pth ファイルを含んでいる場合、site.py はそれらをアルファベット順に処理します。

しかしながら、いくつかの .pth ファイルにはモジュール検索パスの先頭に (標準ライブラリパスよりも先に) ディレクトリエントリを挿入するコマンドが埋め込まれています。 その結果、挿入されたディレクトリの 1 つからのモジュールは、標準ライブラリ・ディレクトリからの同名のモジュールの代わりにロードされます。 これは、そのような置き換えが意図されていない限り、望ましくない混乱した動作となる可能性があります。

Note:

もし import リクエストが site.py.pth ファイルによって常に妨害される場合、-S (uppercase “S”):

 python -S

これにより site.py の自動インポートは無効になり、結果として sys.path が操作できないようにします。 ただし、site.py がユーザー site-packages のディレクトリを sys.path に追加することもできなくなります。 sys.path にユーザー site-packages ディレクトリを追加せずに site.py をインポートするには、-s (小文字の “s”) オプションをつけて Python を起動します:

 python -s

import コマンドを発行したときに Python がスキャンするディレクトリは、コマンドラインで、Enter してください。

 python -c "import sys; print ('\n'.join(sys.path))"

あるいは、対話モードで Python を起動し、同じコマンドをこの順序で実行してください (>>> は Python のプライマリプロンプトです):

 >>>import sys >>>print ('\n'.join(sys.path))
Note:
sys.path は、他の Python リストと同様に編集できる単なる文字列のリストです。 リストの最初の項目 (path) は、多くのパッケージが Python インタープリタを起動するためのスクリプトを含むディレクトリを指していると仮定しているので、編集しないようにしましょう。

関連ドキュメント

コメントを残す

メールアドレスが公開されることはありません。