【发布时间】:2019-11-13 03:40:42
【问题描述】:
我正在尝试在 Ubuntu 18.04 上使用 Apache 2.4 部署一个非常基本的 Django 应用程序,而不使用虚拟环境。 wsgi.py执行时找不到django模块。
我尝试在 wsgi 中设置 sys.path,各种解决方案为 000-default.conf 定义了不同的配置设置。将站点包文件夹的所有权更改为 Apache 的 www-data,但似乎没有任何效果。我可以使用 virtualenv 使其工作,但对于生产服务器,我不想使用 virtualenv。我可以毫无问题地在 Python 的命令行中导入 django。
以下是我的 sample.tst.conf,如果已经使用 a2ensite 命令激活它。
<code>
<VirtualHost *:80>
ServerName sample.tst
ServerAdmin webmaster@sample.tst
DocumentRoot /var/www/html
<Directory /home/raza/projects/sample/sample>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess sample python-path=/home/raza/projects/sample
WSGIProcessGroup sample
WSGIScriptAlias / /home/raza/projects/sample/sample/wsgi.py
<Location />
WSGIProcessGroup sample
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<code>
我该如何解决这个问题?我在这个问题上苦苦挣扎了一个多星期。
我是一位经验丰富的程序员,但对 Linux、python 和 Apache 平台非常陌生,所以我可能会犯一些明显的错误。
我在 Apache 日志文件中收到以下错误:
[Tue Jul 02 18:05:22.458785 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] mod_wsgi (pid=12490): Target WSGI script '/home/raza/projects/sample/sample/wsgi.py' cannot be loaded as Python module.
[Tue Jul 02 18:05:22.458854 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] mod_wsgi (pid=12490): Exception occurred processing WSGI script '/home/raza/projects/sample/sample/wsgi.py'.
[Tue Jul 02 18:05:22.458916 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] Traceback (most recent call last):
[Tue Jul 02 18:05:22.459009 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] File "/home/raza/projects/sample/sample/wsgi.py", line 12, in <module>
[Tue Jul 02 18:05:22.459037 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] from django.core.wsgi import get_wsgi_application
[Tue Jul 02 18:05:22.459072 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] ModuleNotFoundError: No module named 'django'
[Tue Jul 02 18:05:22.490159 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] mod_wsgi (pid=12490): Target WSGI script '/home/raza/projects/sample/sample/wsgi.py' cannot be loaded as Python module.
[Tue Jul 02 18:05:22.490240 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] mod_wsgi (pid=12490): Exception occurred processing WSGI script '/home/raza/projects/sample/sample/wsgi.py'.
[Tue Jul 02 18:05:22.490297 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] Traceback (most recent call last):
[Tue Jul 02 18:05:22.490314 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] File "/home/raza/projects/sample/sample/wsgi.py", line 12, in <module>
[Tue Jul 02 18:05:22.490318 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] from django.core.wsgi import get_wsgi_application
[Tue Jul 02 18:05:22.490330 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] ModuleNotFoundError: No module named 'django'
【问题讨论】:
-
可能你的django安装在不同的python环境下。我建议检查您安装 django 的 python 版本,并检查您是否使用任何 python env
-
我只安装了Python 3.6,django安装在/home/raza/.local/lib/python3.6/site-packages。在这台机器上,我没有安装 venv 或 virtualenv 只是为了避免混淆。我也可以从 python3 命令行导入 django。
-
试试
which python3。这应该会打印出home/raza/.local/lib/python3.6/bin/python/,但我认为它会显示/usr/bin/python3.6或/usr/local/bin/python3.6,这意味着您已经在全局python 下安装了django,而不是在主文件夹中安装了python。 -
你说得对,它说 /usr/bin/python3。我怎样才能解决这个问题?出于好奇,为什么我可以从 python3 命令行导入 django?
-
更改此文件
sample.tst.conf以指向您的全局 python3 安装。当您在终端中键入 python3 时,它会执行/usr/bin/python3并且因为我假设您执行了sudo pip install djangodjango 安装在全局 python3 下。如果你愿意,你可以点 pip 来使用你的本地 python(我不知道你是怎么做到的,通常你需要创建 virtualenv)。
标签: django python-3.x apache mod-wsgi