Django Apache和Virtualenv ImportError:没有名为site的模块

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

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
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的Python虚拟环境时,非常重要的一点是,它是使用与mod_wsgi最初编译时使用的相同Python安装创建的。不可能使用Python虚拟环境强制mod_wsgi使用不同的Python版本,甚至不同的Python安装

例如,当mod_wsgi最初为Python2.7编译时,不能强制mod_wsgi使用使用Python3.5创建的Python虚拟环境。这是因为它最初编译时所针对的Python安装的Python库直接链接到mod_wsgi模块中

所以最有可能发生的事情是mod_wsgi是为Python2.6编译的。在这种情况下,您不能强制它使用从Python2.7创建的Python虚拟环境。执行此操作时,您将看到关于
站点
模块丢失的错误

您需要从系统包中卸载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