(An English translation is available here.)
この記事では、PipenvでOSごとに異なるインストール処理をするパッケージがある場合において、Pipfileの書き方について説明します。
具体例として、PyTorch v0.4.1について、macOS/Windowsに両対応するPipfileを作成します。
はじめに
多くのパッケージでは、インストール方法はOSによらず共通です。例えば、numpyであれば、
pipenv install numpy
とすればOKです。
しかし、例えば、PyTorch v0.4.1については、macOSでは、
pipenv install torch
ですが、Windowsでは、
pipenv install http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-win_amd64.whl
と、インストール方法が異なります。(この例では、PyTorchのインストールオプションとして、Python 3.6のCUDAなしバージョンを使うものとします。)
Pipfileでは、macOSであれば前者の処理、Windowsであれば後者の処理をするように書く必要があります。どのようにすれば実現できるのでしょうか?
方法
sys_platform
を指定すればOKです。Pipenvの公式ドキュメントに、特にWindowsのみpywinusb
をインストールする例について記載があります。
PyTorch v0.4.1については、私が使っているPipfileでは、次のようになります。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
theano = "*"
tensorflow = "*"
keras = "*"
numpy = "*"
scipy = "*"
matplotlib = "*"
seaborn = "*"
jupyter = "*"
jupyterlab = "*"
ipython = "*"
pandas = "*"
scikit-learn = "*"
spyder = "*"
pillow = "*"
torch = {version = "==0.4.1", sys_platform = "== 'darwin'"}
"b4b7455" = {file = "http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-win_amd64.whl", sys_platform = "== 'win32'"}
torchvision = "*"
[dev-packages]
pylint = "*"
[requires]
python_version = "3.6"
[packages]
の
torch = {version = "==0.4.1", sys_platform = "== 'darwin'"}
"b4b7455" = {file = "http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-win_amd64.whl", sys_platform = "== 'win32'"}
で、sys_platform = "== 'darwin'"
がmacOSの場合、sys_platform = "== 'win32'"
がWindowsの場合を意味しています。
なお、"b4b7455"
は、Windows上でpipenv install http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-win_amd64.whl
を実行すると、Pipfileに記載されます。その状態のPipfileに、sys_platform = "== 'win32'"
を追記します。
GitHubにpipenv_cross-platform_exampleというリポジトリを作成し、PipfileとPipfile.lockを置きましたので、参考にしてください。