ImportError: Interpreter change detected – this module can only be loaded into one interpreter per process.

Pythonで書いたアプリをApache+WSGIで実行していたらエラーに直面しました。直訳すると「Importのエラーです。インタープリターの変更が検出されました。このモジュールは、1プロセスにつき1つのインタープリターだけが読み込むことができます。」ということです。

原因は、1つのApacheで複数のアプリをホストしていたせいだと思います。開発中のアプリのデモ用に使っているホストで、ドメインごとに異なるアプリをホストしていました。最初にアクセスしたアプリは正常に実行できるものの、その次にアクセスしたアプリではInternal Server Error(HTTP 500)になっていました。

ちなみにImportErrorを起こしていたモジュールは mojimoji です。全角半角の変換をしてくれる便利屋です。

解決策

“per process”と書いてあるので、プロセスを分ければ万事解決です。WSGIDaemonProcessとかWSGIProcessGroupを指定してプロセスを分けます。

設定はこのあたりのサイトが参考になります。WSGIProcessGroupはvenv環境でアプリを構築するときにも使うので、WSGIアプリ(Pythonアプリ)は基本的にはこの方法で設定するようにしておくと間違いがなさそうです。