質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

CentOS7+Django+Python+Appach+mod_wsgi連携 ModuleNotFoundError: No module named 'encodings'

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 1,580

score 13

環境

さくらVPS
CentOS7
Django       2.2.7
Python       3.7.5
mod-wsgi     4.7.0 
Apache       2.4.6

前提・実現したいこと

djangoで作成したwebアプリを公開したいのですが、mod_wsgiとDjangoの連携が下記エラーによりうまくいきません。
かれこれ1週間くらい同じ問題に悩んでいます。もし知見のある方がいらっしゃれば御助力いただければ幸いです。

発生している問題・エラーメッセージ

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

現状まで行った内容

前略 公開鍵の設定・ユーザー名作成など

1,pyenvを使ったpythonのインストール

参考サイト
CentOS7にPyenvとPython3系をインストール

2,virtualenvで仮想環境作成

python3 -m venv env
envパス  
/home/ユーザー名/env

3,必要なライブラリDjango等をpip3でインストール

pip3 install Django==2.2.7

4,pip3を利用したmod_wsgiのインストール

参考サイト
PythonのDjangoを動かすために「mod-wsgi」をインストールしたいのですができません...

5,githubから作成したwebアプリをclone

djangoプロジェクトパス
/home/ユーザー名/hoge1/hoge2/myProject
wsgi.pyパス
/home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py

6,django.confの作成(django.confはAppachのhttpd.confにincludeされます)

参考
centos7へapache2.4とmod_wsgiインストールし、djangoデプロイまで
django.confパス

etc/httpd/conf.d/django.conf

LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py
WSGIPythonHome /home/ユーザー名/env
WSGIPythonPath /home/ユーザー名/hoge1/hoge2/myProject
<Directory /home/ユーザー名/hoge1/hoge2/myProject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

7,再起動

systemctl restart httpd
ここでエラーは発生せず

8,エラー確認

tail -f /var/log/httpd/error_log

試したこと

エラーの発生原因がWSGIPythonHomeが間違ってるという情報があったためWSGIPythonHomeの理解を深める、WSGIPythonHomeのパスを変更

参考サイト
djangoチュートリアル学習中 Apache(mod_wsgi)動かず
How to use Django with Apache and mod_wsgi¶
参考サイト等を読んでみての私のWSGIPythonHomeの見解
WSGIPythonHomeはpythonの依存関係がvirtualenv内にある場合、virtualenvのルートパスをWSGIPythonHome に追加しなければいけない

$which python3

/home/ユーザー名/env/bin/python3


$mod_wsgi-express module-config 

LoadModule wsgi_module "/home/ユーザー名/env/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/ユーザー名/env"


正しいように思えます・・

WSGIPythonPathの変更

Djangoのプロジェクトのパスを指定するという情報もあれば,Pythonの場所にするという情報もあったりなので、下記などpythonの場所を指定してみたりしました。
WSGIPythonPath /home/ユーザー名/env/lib/python3.7/site-packages

WSGIDaemonProcessを用いたdjango.confを作成

参考サイト
WSGIDaemonProcess
django.confを下記に書き換え

NameVirtualHost *:80
LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
WSGISocketPrefix run/wsgi
<VirtualHost *:80>
    ServerName domain.com

    WSGIDaemonProcess domain.com python-home=/home/ユーザー名/env python-path=/home/ユーザー名/hoge1/hoge2/myProject
    WSGIProcessGroup domain.com
    WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py


    <Directory /home/ユーザー名/hoge1/hoge2/myProject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

どれもだめでした。

怪しい点

エラーとの因果関係はわからないですが、原因の可能性あり

そもそもpython3 manage.py runserver で接続できない(ローカルで繋がらない)

migrateは成功しています。
python3 manage.py runserver 0.0.0.0:8000
を実行時にはエラーは発生していませんが、表示されるURLをブラウザで開くと"このサイトにアクセスできません 接続が拒否されました"というメッセージが表示されます。

他の情報も思い出せば追記いたします。
1週間以上解決できず、大変困っています。
これは感覚の話で恐縮ですが、根本的に間違ってるかケアレスミスな気がします。
どうか心当たりのある方がいらっしゃれば御助力お願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • tatamyiwathy

    2020/01/20 13:02

    さくらVPSにログインして実行しているか、であってます。
    「manage.py runserver」でアクセスできないのはポートが空いていないからではないでしょうか。
    もし開発用サーバーを立ち上げてアクセスしようとお考えでしたらsettpings.ptの「ALLOWED_HOSTS = ["*"]」でアクセスするホストを制限してください。だれでもアクセスしてヤバイことになります。

    No module named 'encodings'のエラーについてはteratailで検索するといくつかヒットしますのでそちらをご確認ください。

    キャンセル

  • RokuroYamaki

    2020/01/20 21:03

    ポート番号の線はアリそうですね。調査してみます。

    >No module named 'encodings'のエラーについてはteratailで検索するといくつかヒットしますのでそちらをご確認ください。
    いろいろなサイトを参考にして試しているのですが、現状解決に至っていません。

    キャンセル

  • tatamyiwathy

    2020/01/21 11:04

    なるほど。できればローカル環境で動かしてwsgi系に問題があるのか、そうでないのか、の切り分けをしたいですね。トラブルが発生したときはできるだけシンプルな環境に作り直したほうが解決が早くなります。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る