mod_wsgi インストール時の not supported wheel on this platform 対処法
経緯
環境を作っては壊してやっているうち、雑にApacheとPythonをインストールして雑にmod_wsgiをインストールしようとしたら、次のようなエラーが出て進めず。
PS C:\Apache24> pip install .\mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl
mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
環境
- Windows Server 2016
- Apache==2.4
- Python==3.5
- mod_wsgi==4.7.0
結論
エラーメッセージでご指摘の通り、環境が合っていなかった。
ちなみに、GitHubのmod_wsgiのページには、ビルド済みパッケージを利用する際は環境を厳密にあわせること、と注意書きがある。
詳細
そもそも、mod_wsgiをインストールする際はいつもこちらの記事にお世話になっている。
Python Windows で mod_wsgi を Apache に組み込む方法
上記の記事に記載のある通り、Unofficial Windows Binaries for Python Extension Packagesからビルド済みのパッケージをダウンロードする際、
mod_wsgi-[mod_wsgiのバージョン]+ap[apacheのバージョン]vc[Visual Studio compiler のバージョン]-cp[Pythonのバージョン]-cp[Pythonのバージョン]m-win[OSのビット数].whl
で選ばなければならないが、いつも「これかな」でうまくいっていたので、いざ通らなくなると焦る。上記はApache側とPython側の大きく2つに分けられる。
Apache側(apXXvcYY)
apXX
こちらは簡単。Apacheをダウンロードしてきたサイト(Apache Lounge)に書いてある。
vcYY
ここで勘違い。てっきり、自分のPCにいれてあるVC++ランタイムのバージョンのことかと思って、VC++ランタイムをいろいろインストールし直したりしたがうまくいかない。
Apacheのバイナリをビルドした際に使用されたVC++ランタイムのバージョンのことだった。
どのVC++ランタイムでビルドされたかは、Apache Loungeにちゃんと書いてある。
2020年9月現在、mod_wsgiのバイナリは最新でもVC14対応になっている(一方、VC++の最新はVC16)。なので、過去のリリースから少し古いApacheをインストールする必要がある。
Python側(cpXX-cpYYm-winZZ)
インストールされたPythonに合うかどうか、どうやって判断するのか謎だった。
答えは、Pythonコンソールを開くとそこに大体書いてある。
PS C:\Apache24> python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
また、コンソール中で、
from pip._internal.utils.compatibility_tags import get_supported
get_supported()
[<cp35-cp35m-win_amd64 @ …>, <cp35-abi3-win_amd64 @ …>, <cp35-none-win_amd64 @ …>, <cp34-abi3-win_amd64 @ …>, <cp33-abi3-win_amd64 @ …>, …
のように確認できる。自環境では、cp35-cp35m-win_amd64でよいことがわかる。
世の中の多くの記事には、
from pip._internal.pep425tags import get_supported
のように書いてあるが、Python2系以降ではpep425tags
は無くなっているようだ。
参考:Python-Control 環境構築 & whlファイル インストールエラー対応
反省
- もうちょっと英語をちゃんとよむ。
- あんまり雑に環境を作らない。
Discussion