Django Apache和Virtualenv ImportError:没有名为site的模块
apache在504页之后出现的错误Django Apache和Virtualenv ImportError:没有名为site的模块,django,virtualenv,mod-wsgi,centos6,Django,Virtualenv,Mod Wsgi,Centos6,apache在504页之后出现的错误 [info] mod_wsgi (pid=): Python home /var/venv/mybox. [info] mod_wsgi (pid=): Initializing Python. ImportError: No module named site 这是一个几乎没有配置的应用程序 <IfModule mod_wsgi.c> WSGIDaemonProcess myapp python-home=/var/venv/mybox WS
[info] mod_wsgi (pid=): Python home /var/venv/mybox.
[info] mod_wsgi (pid=): Initializing Python.
ImportError: No module named site
这是一个几乎没有配置的应用程序
<IfModule mod_wsgi.c>
WSGIDaemonProcess myapp python-home=/var/venv/mybox
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/html/web/myapp/wsgi.py
WSGISocketPrefix /var/run/wsgi
<Directory /var/www/html/web>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</IfModule>
mywsgi.py
import os,sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
sys.path.insert(0,'/var/www/html/web')
activate_this = '/var/venv/mybox/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
application = get_wsgi_application()
Pythonhome未设置这是从
写下:
WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath/path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
问题也可能出在-
更改标准Python库的位置。默认情况下
在prefix/lib/pythonversion和
exec_prefix/lib/pythonversion,其中prefix和exec_prefix是
依赖于安装的目录,两者都默认为/usr/local
当PYTHONHOME设置为单个目录时,其值将替换这两个目录
前缀和exec_前缀。要为这些指定不同的值,请设置
PYTHONHOME to prefix:exec_prefix
试着清理你的蟒蛇窝
:
user$ export PYTHONHOME=
有关在mod_wsgi中使用虚拟环境的文档,请访问:
站点
模块丢失的错误
您需要从系统包中卸载mod_wsgi,并从源代码中安装mod_wsgi,然后根据Python 2.7进行编译。执行此操作的最简单方法可能是使用pip安装
方法,如中所述:
pip install
在您的虚拟环境中安装它,然后按照“连接到Apache安装”一节中有关配置Apache以使用它的说明进行操作。在CentOS 7中使用Apache 2.4.6解决
我的整个服务器都使用Python2.7,但我已经安装了Python3.6,我的virtualenv使用的是Python3.6
使用以下代码配置djang.conf(/etc/httpd/conf.d/django.conf)后:
<VirtualHost *:80>
WSGIDaemonProcess myProj python-home=/home/user/django-site/env python-path=/home/user/django-site
WSGIProcessGroup myProj
WSGIScriptAlias /myProj /home/user/django-site/my-project/wsgi.py
Alias /static /home/user/django-site/static
<Directory /home/user/django-site/static>
Require all granted
</Directory>
<Directory /home/user/django-site/my-project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
我收到了一千行错误(/var/log/httpd/error\u log)
解决方案
第一:
sudo grep wsgi /var/log/httpd/error_log
我明白了:
[mpm_prefork:notice] [pid 62324] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations
请注意Python版本(2.7.5)。根据我的Python 3.6,我为获得mod_wsgi所做的工作是使用:
yum list *mod_wsgi*
Installed packages
mod_wsgi.x86_64 3.4-18.el7 @base
Disponible packages
python35u-mod_wsgi.x86_64 4.6.2-1.ius.centos7 ius
python36u-mod_wsgi.x86_64 4.6.2-1.ius.centos7 ius
然后我安装了python36u-mod_wsgi.x86_64包:
sudo yum install python36u-mod_wsgi.x86_64
然后我重新启动了Apache服务:
sudo systemctl restart httpd
并从日志中获得了这一新行:
[Fri Mar 29 12:33:26.788716 2019] [mpm_prefork:notice] [pid 76317] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/4.6.2 Python/3.6 configured -- resuming normal operations
一切都正常!:-)
希望对你有帮助。是的 在Ubuntu上,如果你想使用python3,你必须卸载
libapache2 mod wsgi py
并安装libapache2-mod-wsgi-py3
,如果你是从存储库获得mod_wsgi的话。
yum remove mod_wsgi.x86_64
yum install mod_wsgi.x86_64
/etc/init.d/httpd restart
起初,我对该文档进行了深入研究,然后我尝试了格雷厄姆·邓普尔顿的博客和教程。我总是遇到同样的错误尝试更改pythonhome位置无法加载/var/venv/mybox/lib/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so到服务器:无法打开共享对象文件:权限被拒绝。我尝试更改权限您的SELinux配置文件很可能不允许Apache在该位置使用内容。尝试将虚拟环境置于
/var/www
下。使用pip安装mod_wsgi并将virtualenv移动到/var/www可以正常工作。这是一个内部站点,因此我们可以做出妥协。这在Centos 7上为我提供了Python3.6 venv环境。
sudo yum install python36u-mod_wsgi.x86_64
sudo systemctl restart httpd
[Fri Mar 29 12:33:26.788716 2019] [mpm_prefork:notice] [pid 76317] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/4.6.2 Python/3.6 configured -- resuming normal operations
yum remove mod_wsgi.x86_64
yum install mod_wsgi.x86_64
/etc/init.d/httpd restart