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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

解決済

3回答

3930閲覧

mod_wsgiのエラー  ImportError: No module named 'django'

stwebyy

総合スコア14

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2018/08/14 07:21

編集2018/08/17 15:23

Djangoの自作アプリを作成し、ネットにアップしたいと思いVPSを借りてデプロイ作業を行なっています。

環境 Ubuntu16.04 Pyhton3.6.4 Django2.0.2

色々なサイト様を拝見し、あと少しでデプロイできそうな感じになっています。(そんな気がします・・・。)
複数のドメインを使用する予定なので、バーチャルホストの設定をしつつのデプロイ作業になっています。
今やり終えたことは

python導入 Django導入 Apache2導入 mod_wsgi導入

までは終えています。
仮想環境は使用していません。

Djangoアプリの場所 /var/www/hoge/hogehoge

以下、設定ファイルです。

pythonの場所 ['', '/root/.pyenv/versions/3.6.4/lib/python36.zip', '/root/.pyenv/versions/3.6.4/lib/python3.6', '/root/.pyenv/versions/3.6.4/lib/python3.6/lib-dynload', '/root/.pyenv/versions/3.6.4/lib/python3.6/site-packages']
/etc/apache2/sites-available/hoge.conf <VirtualHost *:80> ServerName hogeyy.com WSGIDaemonProcess hogeyy.com python-home=/root/.pyenv/versions/3.6.4/ python-path=/var/www/hoge/hogehoge WSGIProcessGroup hogeyy.com WSGIScriptAlias / /var/www/hoge/hogehoge/app/wsgi.py \ process-group=hogeyy.com application-group=%{GLOBAL} Alias /static/ /var/www/hoge/hogehoge/static/ Alias /media/ /var/www/hoge/hogehoge/media/ <Directory /var/www/hoge/hogehoge/static> Require all granted </Directory> <Directory /var/www/hoge/hogehoge/media> Require all granted </Directory> <Directory /var/www/hoge/hogehoge/app> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>

上記の設定で、ブラウザにて確認しようとしたら以下のエラーが発生しました。

[Tue Aug 14 15:46:10.303186 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] mod_wsgi (pid=20441): Target WSGI script '/var/www/hoge/hogehoge/app/wsgi.py' cannot be loaded as Python module. [Tue Aug 14 15:46:10.303700 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] mod_wsgi (pid=20441): Exception occurred processing WSGI script '/var/www/hoge/hogehoge/app/wsgi.py'. [Tue Aug 14 15:46:10.304015 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] Traceback (most recent call last): [Tue Aug 14 15:46:10.304067 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] File "/var/www/hoge/hogehoge/app/wsgi.py", line 12, in <module> [Tue Aug 14 15:46:10.304139 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] from django.core.wsgi import get_wsgi_application [Tue Aug 14 15:46:10.304193 2018] [wsgi:error] [pid 20441:tid 140562936821504] [remote 34.212.172.251:26708] ImportError: No module named 'django'

参考にさせていただいたサイト
Django + Apache + mod_wsgiでWebサーバを構築してみた
Stackflow

apache2、mod_wsgiを再インストールし直して同じことをやってみましたが、同じ状況です。

sudo apt-get apache2 apache2-dev ↓ pip install mod-wsgi mod-wsgi-httpd

Djangoアプリディレクトリからpython manage.py runserverを行い動作を確認しましたが、サイトは立ち上がっていました。
デプロイのやり方が間違っているのでしょうか?

初めてのデプロイ作業のためなんとかやりきりたいと考えています。
どなたかご教示いただけると幸いです。
よろしくお願いします。

追記(2018/8/17)

以下、Djangoのインストール情報です。

#pip show django Name: Django Version: 2.0.2 Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design. Home-page: https://www.djangoproject.com/ Author: Django Software Foundation Author-email: foundation@djangoproject.com License: BSD Location: /root/.pyenv/versions/3.6.4/lib/python3.6/site-packages Requires: pytz Required-by: django-debug-toolbar

追記(2018/8/18 0:18)

/etc/apache2/sites-available/hoge.conf 回答いただいた内容を追記 <VirtualHost *:80> ServerName hoge.com WSGIDaemonProcess hoge.com python-home=/root/.pyenv/versions/3.6.4 python-path=/var/www/hoge/hogehoge:/root/.pyenv/versions/3.6.4/lib/python3.6/site-packages WSGIProcessGroup hoge.com WSGIScriptAlias / /var/www/hoge/hogehoge/app/wsgi.py \ process-group=hoge.com application-group=%{GLOBAL} Alias /static/ /var/www/hoge/hogehoge/static/ Alias /media/ /var/www/hoge/hogehoge/media/ <Directory /var/www/hoge/hogehoge/static> Require all granted </Directory> <Directory /var/www/hoge/hogehoge/media> Require all granted </Directory> <Directory /var/www/hoge/hogehoge/app> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
0:18現在のエラーメッセージ(以前のエラーメッセージと行数が違うのは、以前のconfファイルにはstatic系のコードが記載されていないため) [Sat Aug 18 00:18:03.199880 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] mod_wsgi (pid=9826): Target WSGI script '/var/www/hoge/hogehoge/app/wsgi.py' cannot be loaded as Python module. [Sat Aug 18 00:18:03.200236 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] mod_wsgi (pid=9826): Exception occurred processing WSGI script '/var/www/hoge/hogehoge/app/wsgi.py'. [Sat Aug 18 00:18:03.200512 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] Traceback (most recent call last): [Sat Aug 18 00:18:03.200572 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] File "/var/www/hoge/hogehoge/app/wsgi.py", line 20, in <module> [Sat Aug 18 00:18:03.200584 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] from django.core.wsgi import get_wsgi_application [Sat Aug 18 00:18:03.200637 2018] [wsgi:error] [pid 9826:tid 140161661003520] [remote 35.171.84.122:33256] ImportError: No module named 'django'

ここまでで行ったこと

sudo service apache2 restart sudo service apache2 stop sudo service apache2 start

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tell_k

2018/08/17 05:03

Django はどうやって installしましたか? 「ImportError: No module named 'django'」が見つからないというエラーなので、ライブラリとしてのdjangoがインストールされてる場所にパスが通ってない可能性があります。
tell_k

2018/08/17 05:30 編集

二つの記事ともに、virtualenv で 仮想環境を作ってますが、 stwebyyさんは仮想環境は作っていますかね? もし作ってるのであればそこにDjangoがインストールされてる気がします。
stwebyy

2018/08/17 05:37

それが、仮想環境がよくわからずvirtualenvを使用せずにいます。Djangoのインストール先などを追記しましたのでご確認いただけますか?
guest

回答3

0

当初は仮想環境をpyenvで行いましたが、virtualenvを使用し、一からやり直しました。

環境 Ubuntu16.04 Pyhton3.6.4 Django2.0.2 virtualenv

ssh接続やファイアウォールの設定などは省きます。
root以外の一般ユーザーを1人作成しています。

apache2のインストールを別途行います。

pythonのインストール

pyenvを使用していないため、下記コマンドで行いました。

$ sudo add-apt-repository ppa:jonathonf/python-3.6.4 $ sudo apt-get update $ sudo apt-get install python3.6.4 python3.6.4-dev $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python3.6.4 get-pip.py

参考サイト様
※ここらへん曖昧なので、もしかしたら3.6と指定をしてあげないといけないかもです。

virtualenvのインストール

$ sudo pip install virtualenv $ sudo pip install virtualenvwrapper

参考サイト様2
参考サイト様3(python3の場合)
仮想環境は下記のやり方で作っています。

$ cd /var/hoge/ $ python3 -m venv 好きな名前(今回はvenv) $ source venv/bin/activate (venv)hoge@tk0-000-00:/var/hoge$

となるはずです。
これで仮想環境の立ち上げが完了。

Djangoのインストール

Djangoをインストールしたいディレクトリを作成。
githubと連携。

(venv)$ cd /var/hoge/venv (venv)$ mkdir django (venv)$ cd django/ (venv)$ git init (venv)$ git add remote origin hogehoge

私は既にアプリを作成していましたので、githubからpullを行い、以下のコマンドを実行。

(venv)$ git pull origin master (venv)$ pip install -r requirements.txt

ubuntu上でDjangoを作成する方は別途やり方をググってみてください。
DjangoをUbuntuでデプロイ

mod_wsgiの連携

ここが非常に難しいですよね。
mod_wsgiのインストール

(venv) $ pip install mod_wsgi

以下、mod_wsgiの場所とPythonの場所を記載します。

mod_wsgiの場所 (venv)$ mod_wsgi-express install-module(私は頭にsudoをつけないと怒られました) LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so" WSGIPythonHome "/usr/local"
Pythonの場所 (venv)$python3 -V Python 3.6.4 (venv)$which python3 /var/hoge/venv/bin/python3

バーチャルホストを設定したかったので、apache2のsites-availableにファイルを追加します。
簡単に最終的なconfのコードを書きます。

# vi /etc/apache2/sites-available/hoge.conf <VirtualHost *:80> LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so ServerName hugahuga.com WSGIDaemonProcess hugahuga.com python-path=/var/hoge/venv/django:/var/hoge/venv/bin/python3 WSGIProcessGroup hugahuga.com WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias / /var/hoge/venv/django/app/wsgi.py Alias /static/ /var/hoge/venv/django/static/ Alias /media/ /var/hoge/venv/django/media/ <Directory /var/hoge/venv/django/static> Require all granted </Directory> <Directory /var/hoge/venv/django/media> Require all granted </Directory> <Directory /var/hoge/venv/django/app> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost> :wq(保存) # a2enconf hoge(.confはつけなくてよし。)

ここまでで、apache2とmod_wsgiの関連付けができました。

色々なサイト様にmods-availableにwsgi.loadが必要とか、confが必要とか書いてありますが、
作っていません。

色々なサイト様にapache2.confの最後にWSGI Loadmoduleを追記して!と書いてありますが、
追記していません。

今回はUbuntuかつ、バーチャルホストなのでやり方が違うのかもしれませんね。
これでデプロイが完了しました!

書くのが遅くなってしまいすみません。
この解決法を見て、1人でもお役に立てられれば幸いです。

投稿2018/08/27 15:10

stwebyy

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

お手数でなければ、以下確認してみてください。

which pip
which pip3
pip3 freeze

apacheとPython3の紐付けが不明ですが、ライブラリをpip3でインストールすれば動く気がします。

投稿2018/08/20 05:52

Meganezaru

総合スコア715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stwebyy

2018/08/20 15:45

こちらの方法を試してみたかったのですが、OS再インストールからやり直し、venvを使用するやり方でデプロイを行ったところ、mod_wsgiもうまく読み込んでくれたので動いてくれました。 ご回答いただきありがとうございます!
guest

0

ベストアンサー

下記のように python-path に Djangoのインストール先も追記して試して見てください。「/var/www/hoge/hogehoge」 に Djangoのインストール先である「/root/.pyenv/versions/3.6.4/lib/python3.6/site-packages」 を追加しています。

変更前

WSGIDaemonProcess hogeyy.com python-home=/root/.pyenv/versions/3.6.4/ python-path=/var/www/hoge/hogehoge

変更後

WSGIDaemonProcess hogeyy.com python-home=/root/.pyenv/versions/3.6.4/ python-path=/var/www/hoge/hogehoge:/root/.pyenv/versions/3.6.4/lib/python3.6/site-packages

参考
https://www.digitalocean.com/community/tutorials/how-to-run-django-with-mod_wsgi-and-apache-with-a-virtualenv-python-environment-on-a-debian-vps

投稿2018/08/17 06:06

編集2018/08/17 06:07
tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stwebyy

2018/08/17 09:32

回答ありがとうございます。 python-pathに追記し、試しましたが同じエラーが発生してしまいました・・・。 仮想環境を入れないとダメなんでしょうか・・。
tell_k

2018/08/17 15:02

謎ですね。 ちなみに apache を restart しても同じエラーがでるということで認識あってますか? apacheの再起動を忘れてるとかではなく。
stwebyy

2018/08/17 15:26

その認識であっています。 apacheの再起動は追記のやり方で再起動致しました。 ご確認いただければ幸いです。 Djangoアプリのwsgi.pyに何か記載をしなければいけないのでしょうか。。 wsgi.pyはほとんどいじっていないため、デフォルトの状態です。
stwebyy

2018/08/20 15:43

OS再インストールからvenvを利用するやり方に変え、デプロイが完了いたしました! 後ほど詳細は記載いたしますが、ご回答いただいたおかげです。 変更後のコードを最終的に編集し使用したら読み込んでくれました。 デプロイだけで2〜3週間ほど詰まっていたので感無量です。 ご回答いただきありがとうございました!
tell_k

2018/08/21 01:58

無事デプロイできて何よりです。解決した方法をぜひどこかに掲載してください。同じようにハマってる方の助けになると思います。
stwebyy

2018/08/27 15:12

遅くなりましたが掲載してみました。 1人でもお役に立てれば幸いです。 また質問するかと思いますのでその際はよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問