Pip を使用した Python の依存関係
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年02月09日(金)
Table of Contents
このガイドでは、pip
を使用して Python アプリケーションの依存関係を指定するための Heroku のサポートを完全に利用する方法の概要について説明します。
Heroku の pip
サポートは非常に透過的です。次のコマンドでローカルにインストールされる要件はすべて、Heroku で想定どおりに動作します。
$ pip install -r requirements.txt
基本
Pip を使用して Heroku での Python パッケージの依存関係を指定するには、リポジトリのルートに requirements.txt
という名前の Pip 要件ファイルを追加します。
requirements.txt
の例を次に示します。
Django==4.1.7
gunicorn==20.1.0
ベストプラクティス
次の単純な推奨事項に従うと、アプリケーションのビルドは決定的になります。
- すべてのパッケージバージョンを明示的に指定する必要があります。
- すべてのセカンダリ依存関係を明示的に指定する必要があります。
これにより、新しいパッケージバージョンがリリースされた場合の一貫したビルド動作が保証されます。
Git でバックアップされた配布
標準の Pip 要件ファイルで動作するものはすべて、Heroku で想定どおりに動作します。
Pip の Git サポートのおかげで、リモート Git リポジトリでホストされる Python パッケージをインストールできます。
次に例を示します。
git+https://github.com/certifi/python-certifi
パッケージがプライベート Git リポジトリでホストされている場合は、HTTP 基本認証を使用できます。
git+https://user:password@github.com/nsa/secret.git
URL に @
を追加することによって、いずれかの Git 参照 (ブランチ、タグ、コミットなど) を指定することもできます。
git+https://github.com/certifi/python-certifi@develop
オプションで、依存関係を “編集可能” モードでインストールできます。これは、リポジトリの完全な複製にリンクされます。これは、上流の変更に依存している Git でバックアップされた配布や、より大きなリポジトリに推奨されます。
egg
フラグメントは、編集可能な要件でのみ有効です。
-e git+https://github.com/django/django.git#egg=django
リモートファイルでバックアップされた配布
リモートアーカイブからパッケージをインストールすることもできます。
次に例を示します。
https://site.org/files/package.zip
これは、多くの状況で役立ちます。たとえば、大きな履歴を持つリポジトリでの GitHub の TAR 書庫の生成を利用できます。
https://github.com/django/django/tarball/master
ローカルファイルでバックアップされた配布
Pip では、ローカルのコードベースから依存関係をインストールすることもできます。これは、既存のパッケージにカスタム調整を加える場合に役立ちます。
Git サブモジュールを使用すると、ファイルでバックアップされた依存関係の個別のリポジトリを保持できます。Git モジュールは、コードを Heroku にプッシュすると自動的に解決されます。
requirements.txt
でローカル依存関係を追加するには、setup.py
を含むディレクトリへの相対パスを指定します。
./path/to/distribution
ただし、必要なバージョン番号を上げずにライブラリに変更を加えた場合、それらの変更は実行時に更新されません。これは、パッケージを編集可能モードでインストールすることによって回避できます。
-e ./path/to/distribution
プライベートインデックス
カスタムパッケージリポジトリのインデックスを指すには、要件ファイルの先頭に次を追加します。
-i https://my-index.example.tld/mypath/
その要件ファイルで指定されたすべての依存関係がそのインデックスに対して解決されます。
要件ファイルのカスケード
コードベースで複数の要件ファイルを利用する場合は、Pip で別の要件ファイルの内容を含めることができます。
-r ./path/to/prod-requirements.txt
このアプローチはお勧めしませんが、使用することはできます。
従来の配布
Heroku では、setup.py
によって機能強化された従来の Python パッケージ配布もサポートされています。
Python アプリケーションに setup.py
ファイルは含まれているが、requirements.txt
ファイルが除外されている場合は、パッケージのインストールや依存関係の解決のために python setup.py develop
が使用されます。
これは、セットアップツールで最適に動作します。distutils を直接使用するプロジェクトはインストールされますが、リンクされません。このモジュールは、バージョンアップがあるまで更新されません。
要件ファイルはすでにあるが、この機能を利用したい場合は、要件ファイルに次を追加できます。
-e .
これにより、Pip はアプリケーション上で python setup.py develop
を実行します。