代码之家  ›  专栏  ›  技术社区  ›  Jabda

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

  •  10
  • Jabda  · 技术社区  · 9 年前

    504页后apache的错误

    [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>
    

    我尽可能地关注每一篇文章和教程。我在CENTOS6上。使用virutal env python 2.7,默认系统环境为2.6

    $ ldd /etc/httpd/modules/mod_wsgi.so
      linux-vdso.so.1 =>  (0x00007ffc06174000)
    

    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()
    

    PYHTONHOME未设置

    5 回复  |  直到 9 年前
        1
  •  10
  •   Community Mohan Dere    5 年前

    使用mod_wsgi的虚拟环境的文档可以在以下位置找到:

    在您的案例中,最重要的部分是:

    该节规定:

    在使用带有mod_wsgi的Python虚拟环境时,非常重要的一点是,它是使用最初编译mod_ wsgi时使用的Python安装创建的。不可能使用Python虚拟环境强制mod_wsgi使用不同的Python版本,甚至不同的Python安装。

    例如,当mod_wsgi最初为Python 2.7编译时,您不能强制mod_ wsgi使用使用使用Python 3.5创建的Python虚拟环境。这是因为它最初编译所针对的Python安装的Python库直接链接到mod_wsgi模块。

    因此,最可能发生的情况是mod_wsgi是为Python 2.6编译的。在这种情况下,您不能强制它使用从Python 2.7创建的Python虚拟环境。当您这样做时,您将看到以下错误 site 模块丢失。

    pip install 如中所述的方法:

    pip安装 在虚拟环境中安装它,然后按照“连接到Apache安装”一节中关于配置Apache使用它的说明进行操作。

        2
  •  8
  •   Lúcio Brígido Júnior    7 年前

    使用Apache 2.4.6在CentOS 7中解决

    我的整个服务器使用Python2.7,但我已经安装了Python3.6,我的virtualenv使用的是Python 3.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>
    

    重新启动了我的apache

    sudo systemctl restart httpd
    

    我得到了一千行错误(/var/log/httpd/error_log)

    ImportError: No module named site
    ImportError: No module named site
    ImportError: No module named site
    ImportError: No module named site
    

    解决方案

    第一:

    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
    

    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
    

    sudo yum install python36u-mod_wsgi.x86_64
    

    然后我重启了Apache服务:

    sudo systemctl重启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
    

    希望对你有帮助。是啊!

        3
  •  1
  •   Ariel Livshits    9 年前

    这是从 Documentation 写下: 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虚拟环境的站点包的路径

    WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
    

    问题也可能在- PYTHONHOME

    更改标准Python库的位置。默认情况下 exec_prefix/lib/pythonversion,其中prefix和exec_ prefix是

    当PYTHONHOME设置为单个目录时,其值将替换这两个目录 前缀和exec_ prefix。要为这些指定不同的值,请设置 PYTHONHOME to前缀:exec_prefix。

    试着清理你的 蟒蛇窝 :

    user$ export PYTHONHOME=
    
        4
  •  1
  •   mateuszb Hala    5 年前

    在Ubuntu上,如果你想使用python3,你必须卸载 libapache2-mod-wsgi-py 安装 libapache2-mod-wsgi-py3 相反,如果您从存储库获得mod_wsgi。

        5
  •  1
  •   Naren    5 年前

    我在centos6.X上使用python 2.7,重新安装mod_wsgi为我解决了这个问题。

    yum remove mod_wsgi.x86_64
    yum install mod_wsgi.x86_64
    /etc/init.d/httpd restart