やりたいこと
Pythonのプロジェクトはライブラリ・アプリケーションの2つに分けられます。
ライブラリを提供する際に「Python >= 3.6のみ動作します」というように、Pythonのバージョンを指定したいときがあります。
アプリケーションについても「Python = 3.6で実行します」と指定したいときがあります。
ライブラリにしろアプリケーションにしろ、pipenvやpoetryのようなパッケージング・依存管理ツールを利用して開発すると便利です。
ここではpipenvの利用を前提として、ライブラリ・アプリケーションそれぞれにおいてどのようにPythonのバージョンを指定すべきか考えます。
ライブラリにおいてPythonのバージョンを指定する
setup.cfgのoptions.python_requires
項目で指定します。
[options] python_requires = >= 3.6
ライブラリでは、依存パッケージをPipfileではなく、setup.cfgのoptions.install_requires
に記述します。
Pythonのバージョンも同じようにsetup.cfgに記述します。
アプリケーションにおいてPythonのバージョンを指定する
Pipfileのrequires
項目で指定します。
[requires] python_version = "3.6"
アプリケーションでは依存パッケージをPipfileに記述します。
アプリケーションの実行結果には再現性が求められます。
つまり、どの環境でも同じ実行結果が得られる必要があります。
再現性を確保するためには、依存パッケージの厳密な指定が必要です。
Pipfileに記述された依存パッケージを元に、利用される依存パッケージのバージョンがPipfile.lockに出力されます。
Pythonのバージョンについても同様にPipfileに記述します。
pipenv shell
を実行することで、指定されたPythonバージョンを利用した仮想環境に入ることができます。
アプリケーションでコマンドを提供している場合は、pipenv run command
で仮想環境上でコマンドを実行できます。