Python
PyTorch
Pipenv

OSごとに異なるインストール処理をするPipfileの作成方法(具体例:PyTorch v0.4.1)

(An English version 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を置きましたので、参考にしてください。