Python パッケージは、Python 言語のコア機能を拡張・強化するモジュール (再利用可能なコード) のコレクションです。 Python 開発者は、公式の Python Package Index (PyPI) リポジトリに貢献し、オープン ソース ライセンス条項の下で Python コミュニティにパッケージを提供しています。 Python Packaging Authority (PyPA) はリポジトリを管理し、Python パッケージの構築、配布、およびインストール用のツールの標準セットを維持します。
Indiana University の研究用スーパーコンピュータでは、多くのサードパーティ製パッケージがすでにインストールされて、一般的に使用する Python ビルドを補足しています。 もし、まだインストールされていないサードパーティの Python パッケージを独自に必要とする場合、 pip
や setup.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 をユーザ環境に追加してください:
- どのモジュールが現在ロードされているかを確認します。
module list
- 現在ロードされているモジュールのリストに Python がない場合、
module load
コマンドを使用して追加します。- デフォルトのバージョンを追加するには、コマンドラインで次のように入力します。
module load python
- デフォルトでないバージョンを追加するには、次のように入力します。
- どのバージョンが利用可能か確認します; コマンドラインで、次のように入力します。
module avail python
- 優先バージョンを読み込む: コマンドラインで、次のように入力します (
version_number
を優先バージョン番号に置き換えます)。module load python/version_number
- どのバージョンが利用可能か確認します; コマンドラインで、次のように入力します。
- デフォルトのバージョンを追加するには、コマンドラインで次のように入力します。
- 現在ロードされているモジュールに 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
は以下の場所からこの順序で初期化される。
- Python インタープリタを起動するために使われたスクリプトを含むディレクトリ (インタープリタが対話的に起動されたり、スクリプトが標準入力から読まれた場合、この最初の項目
path
は空のままであり、これは Python に現在の作業ディレクトリのモジュールを最初に検索するように指示する) - PYTHONPATH
- 実行中の 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.py
が sys.path
にパスを追加するとき、パス設定 (.pth
) ファイルがスキャンされ、その中に sys.path
に追加されるディレクトリが含まれていることがわかります。 もしディレクトリが複数の .pth
ファイルを含んでいる場合、site.py
はそれらをアルファベット順に処理します。
しかしながら、いくつかの .pth
ファイルにはモジュール検索パスの先頭に (標準ライブラリパスよりも先に) ディレクトリエントリを挿入するコマンドが埋め込まれています。 その結果、挿入されたディレクトリの 1 つからのモジュールは、標準ライブラリ・ディレクトリからの同名のモジュールの代わりにロードされます。 これは、そのような置き換えが意図されていない限り、望ましくない混乱した動作となる可能性があります。
もし 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))
sys.path
は、他の Python リストと同様に編集できる単なる文字列のリストです。 リストの最初の項目 (path
) は、多くのパッケージが Python インタープリタを起動するためのスクリプトを含むディレクトリを指していると仮定しているので、編集しないようにしましょう。