やりたいこと
django のチュートリアル学習を進めるにあたって Apache + mod_wsgi 環境を学習早々から構築し、いろいろ学んでいきたい。
お聞きしたいこと=行き詰っている点=エラー
- 環境は Linux From Scratch =自作環境、各種ツール類は総じて最新。VMware環境上。
- django は全くの初心者です。(Python もほぼ分かりません。)
- 公式チュートリアル part1. (https://docs.djangoproject.com/en/2.1/intro/tutorial01/) を実施し、
python3 manage.py runserver 0:8000
でブラウザ表示OK。(チュートリアル内にて polls アプリをごく簡単に作成し views.py を作って簡単な文字列をブラウザに表示させるところまでOK) - 上を Apache + mod_wsgi の環境にて動作させようとすると以下のエラー(/var/log/httpd/error.log; systemctl restart httpd 直後のエラー):
[Sat Oct 13 20:09:04.289947 2018] [mpm_event:notice] [pid 27895:tid 140589367314304] AH00492: caught SIGWINCH, shutting down gracefully [Sat Oct 13 20:09:04.439048 2018] [mpm_event:notice] [pid 28064:tid 139866172979072] AH00489: Apache/2.4.34 (Unix) mod_wsgi/4.6.4 Python/3.7 configured -- resuming normal operations [Sat Oct 13 20:09:04.439214 2018] [core:notice] [pid 28064:tid 139866172979072] AH00094: Command line: '/usr/sbin/httpd' Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Current thread 0x00007f35218e7780 (most recent call first): Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings'
- エラーは httpd (re)start の時点で既に発生。
Fatal Python...
、ModuleNotFoundError: ...
が繰り返し出力され止ることなし。したがってブラウザアクセスしても、ずっとブラウザが読み込み中のまま、何も表示されません。(django チュートリアルの polls アプリの試し画面が表示されません。) - どこをどのように確認して環境整備すればよいでしょうか? encodings という Python モジュールが探し出せていないのかと思いますが、どう設定すればよいのかが分かりません。ご教示お願いします。
環境構築状況もろもろ
- 各種ツール類とバージョン: Python 3.7.0(Python 2.X はなし)、Apache HTTPD 2.4.34、mod_wsgi-4.6.4(pip からではなくソースビルド、ちなみに pip install mod_wsgi も試したが症状変わらず)
- django 環境は venv にて構築:
shell
1$ cd /home/django 2$ python3 -m venv djangodev 3$ source djangodev/bin/activate 4(djangodev) django [ ~/ ]$ cd djangodev 5(djangodev) django [ ~/djangodev ]$ pip install --upgrade pip 6(djangodev) django [ ~/djangodev ]$ pip install django
- (上で述べたように) 公式チュートリアル part1 を順に実施。すべて上記の
source djangodev/bin/activate
後の~/djangodev
ディレクトリ内で実施。 python3 manage.py runserver 0:8000
の実行、および http://<サーバーIPアドレス>:8000/polls へのブラウザアクセスにより、チュートリアルの意図どおりに「Hello, world. You're at the polls index.」の文言がブラウザ表示される。- 次に Apache + mod_wsgi 環境構築へ。Apache HTTPD ソースビルド。mod_wsgi ソースビルド(./configure のオプションとして --with-python=/usr/bin/python3 指定)。
- Apache httpd.conf (関連箇所のみ):
LoadModule deflate_module /usr/lib/httpd/modules/mod_deflate.so LoadModule expires_module /usr/lib/httpd/modules/mod_expires.so LoadModule wsgi_module /usr/lib/httpd/modules/mod_wsgi.so Include /etc/httpd/extra/httpd-django.conf
- django 用の Apache 設定: (httpd-django.conf 新規生成)
WSGIScriptAlias / /home/django/djangodev/mysite/mysite/wsgi.py WSGIPythonHome /home/django/djangodev/mysite WSGIPythonPath /home/django/djangodev/lib/python3.7/site-packages <Directory /home/django/djangodev/mysite/mysite> <Files wsgi.py> Require all granted </Files> </Directory>
- この設定により
systemctl restart httpd
、前述エラーに至る。 - encodings の所在:
(djangodev) django [ ~/djangodev ]$ python Python 3.7.0 (default, Oct 14 2018, 16:45:32) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import encodings >>> encodings <module 'encodings' from '/usr/lib/python3.7/encodings/__init__.py'> >>>
- 前述
httpd-django.conf
のWSGIPythonPath
を
WSGIPythonPath /usr/lib/python3.7:/home/django/djangodev/lib/python3.7/site-packages
としてみても変わらず。(/usr/lib/python3.7: をつけてみた)
- 環境変数(シェル変数) PYTHONHOME、PYTHONPATH の設定はなし。
ModuleNotFoundError: No module named 'encodings'
をググってみると、Python 2.x / 3.x の混在が影響とか、PYTHONHOME の設定を空にすべきとか、ぐらいは見つけましたが、いずれも当方状況には合致しないと捉えています。- ソースビルドからの環境構築(Linux From Scratch)なので、通常の Linux ディストリビューションが行っているかもしれない便利な諸設定などが欠落しているかもしれないと、想像はしますが、そんなものがあるのかないのか、全く分かりません。
- ちなみに /usr/lib/python3.7/encodings/* は Python-3.7.0 のソースビルドインストール時にインストールされているものです。/home/django/djangodev/lib/python3.7 配下に encodings はありません。
- 気にかかる点が2つあって、1つは実行モジュール
python
が通常 systemwide 環境ではpython3
しかなく、python
(数字なしの実行モジュール)はないという点です。しかし venv 環境ではpython3
へのシンボリックリンクが作り出され、その実体はpython3
になっているというところです。何か支障があるでしょうか?
(djangodev) django [ ~/djangodev]$ ls -l `which python` lrwxrwxrwx 1 django apache 7 10月 15 09:39 /home/django/djangodev/bin/python -> python3
- もう1つ気になるのが、自ユーザーを
django
としていますが、Apache の種々アクセスのことを考慮してapache
グループに所属させています。この是非の問題はあるかもしれませんが、そもそもの当質問にて、アクセス権限の問題があるのかどうか・・
$ id django uid=1003(django) gid=25(apache) groups=25(apache)
ModuleNotFoundError: No module named 'encodings'
のエラーを解消し、Apache+mod_wsgi環境にて、django学習を進めていきたいところです。解消方法をご教示いただけたら幸いです。不足情報があればご指摘ください。 よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー