Skip to content
shunter1112 edited this page Aug 21, 2013 · 2 revisions

このガイドは、Pipを経由したPythonのアプリケーションの依存ファイルの指定に対するHerokuのサポートを、完全に利用する方法の全体像を見て行きます。

もし、Heroku上のPythonに関して質問がある場合は、[Herokuのフォーラム上のPython](https://discussion.heroku.com/category/python)の中で議論することを検討してみてください。HerokuとコミュニティベースであるPythonの両方の専門家がそこにはいます。

HerokuのPipのサポートはとてもわかりやすいものになっています。以下のコマンドのようにローカルでインストールした依存ファイル群は、Herokuでも同じように動くでしょう :

$ pip install -r requirements.txt

私たちはPipに対していくつか修正をしていますが、これらのパッチは積極的に上流へとプッシュされています。

基本

HerokuでPythonモジュールである依存ファイルを指定するためには、あなたのリポジトリのルートディレクトリにrequirements.txtという名前のPipのrequirementsファイル

requirements.txtの例 :

Flask==0.8
Jinja2==2.6
Werkzeug==0.8.3
certifi==0.0.8
chardet==1.0.1
distribute==0.6.24
gunicorn==0.14.2
requests==0.11.1

ベストプラクティス

もし、以下のような簡単な推奨事項に従うと、あなたのアプリケーションビルドはあいまいなもので無くなるでしょう :

  • すべてのパッケージのバージョンは明示的に指定しましょう
  • すべての二次的な依存ファイルも明示的に指定しましょう

これで、あたらしいパッケージのバージョンがリリースされたときにも、一貫したビルドの振る舞いを保証することができるでしょう。

Gitからの配布

標準的なPipのrequirementsファイルで動くものは、Herokuでも同じように動きます。

PipのGitサポートのおかげで、リモートのGitリポジトリに置かれているPythonのパッケージもインストールできます。

例えば :

git+git://github.com/kennethreitz/requests.git

もしあなたのパッケージがプライベートのGitリポジトリに置かれているならば、HTTPのBasic認証を使う事が出来ます :

git+https://user:[email protected]/nsa/secret.git

また、どんなGitの参照(例えば ブランチ、タグ、コミットなど)も、@をURLに加える事で、指定する事が出来ます :

git+git://github.com/kennethreitz/requests.git@develop

オプションとして、リポジトリの完全なクローンと接続する"editable"モードで、依存ファイルをインストールすることができます。これはDjangoのような、大規模な配布物に向いています。

`egg`フラグは"editable"モードの依存ファイルのみ有効です。
-e git+http://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

もし書かれているバージョン番号を上げる事なしに、ライブラリに修正を加えた場合でも、その変更は実行時には更新されません。これを避けるために、editableモードでパッケージをインストールすることができます :

-e ./path/to/distribution

プライベートのインデックス

失敗の可能性を最小限にするために、開発者にとって、彼らの依存ファイルが含まれている独自の"Cheeseshop"を並べることは、Pythonコミュニティの中でのとてもよく考えられたベストプラクティスでした。

独自の"Cheeseshop"のインデックスを指定するために、以下のコードをrequirementsファイルの一番上に追加することが出来ます。

-i https://simple.crate.io/

requirementsファイルの中で指定されている全ての依存ファイルは、このインデックスを元にインストールされて行きます。

継承されたrequirementsファイル

もし、複数のrequirementsファイルをあなたのコードベースの中で利用したいならば、別のPipのrequirementsファイルの内容を含めることができます。

-r ./path/to/prod-requirements.txt

古来の配布方法

Herokuはまた、setup.pyを使った、古来のPythonパッケージの配布方法をサポートしています。

もし、あなたのPythonアプリケーションがsetup.pyファイルを含み、requirements.txtファイルを持っていなかったら、パッケージをインストールし、あなたの依存ファイルの状態を正すためにpython setup.py developが使われるでしょう。

これはdistributeかsetuptoolsを使って動くのが最適です。distutilsを使ったプロジェクトは直接インストールはされますが、リンクはされません。モジュールは、バージョンがあがるまでは更新されません。

もし、既にrequirementsファイルを持っているのにこの機能を利用したい場合は、以下をrequirementsファイルに追加することができます :

-e . 

これは、アプリケーション上でPipにpython setup.py developを実行させます。

<script type="text/javascript"> var _gauges = _gauges || []; (function() { var t = document.createElement('script'); t.type = 'text/javascript'; t.async = true; t.id = 'gauges-tracker'; t.setAttribute('data-site-id', '4ef21894f5a1f53a72000009'); t.src = '//secure.gaug.es/track.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(t, s); })(); </script>
Clone this wiki locally