Irohabook
0
5079

Pythonアプリをデプロイするときのrequirements.txtの作り方

まずは結論から。Pythonアプリをデプロイするときはrequirements.txtを用意してサーバーに送る。requirements.txtは、そのアプリが必要とするPythonの環境が書かれている。

例えばDjangoのアプリをサーバーに送るときは、そのアプリのrequirements.txtに次を書いておく。

dj-database-url==0.5.0
Django==2.0.7
django-heroku==0.3.1
psycopg2==2.7.5
pytz==2018.5
whitenoise==3.3.1

これはどのDjangoアプリも必要とするPython環境である。サーバーはここに書かれた環境をもとに、Pythonの環境を切り替える。ここでサーバーはHerokuなどを想定している。

↑のリストはもちろん手作業で打たない。次のコマンドで自動的にrequirements.txtを作る。

pip freeze > requirements.txt

このコマンドを打つときは、カレントディレクトリ(ターミナルの現在地)をアプリのディレクトリにする。Djangoであればアプリディレクトリ直下のmanage.pyと同じ階層に置く。

ここでpip freezeはもちろん仮想環境venv内で行う。つまりこのコマンドは、あなたの仮想環境をそのままrequirements.txtにすることである。

以下はPythonアプリをはじめて作る人のためのメモ。

自分のマシンとサーバーは異なる環境を使っている

アプリを開発するときは

  • 自分のマシンでアプリを作る
  • そのアプリをサーバーに送る(デプロイという)

という手順をとる。開発者は「自分のマシン」をよくローカル環境と呼ぶ。ローカル環境、つまり自分のマシンはサーバーと環境が異なる。

ローカル環境はPython2系だが、サーバーはPython3系かもしれない。その逆もありうる。ローカル環境はDjangoをインストールしているが、サーバーはしていない、という可能性もある。

つまりrequirements.txtはローカル環境で使っているPythonの環境(psycopg2はバージョン2.7.5を使っている、といった情報)をサーバーに知らせる役割を持つ。

pip freeze

pip freezeをターミナルで打つと、その仮想環境で用意しているパッケージとバージョン一覧が出てくる。つまり

pip freeze > requirements.txt

はその結果をテキストにしているだけにすぎない。

次の記事

システム・環境