ImportError:没有名为site的模块。 Flask + uWSGI + virtualenv

时间:2014-11-18 03:01:11

标签: python flask centos virtualenv uwsgi

我无法让我的烧瓶应用程序在运行CentOS 6.5的新服务器上运行。使用uWSGI。 (我有一个类似的CentOS盒,运行正常)

我在虚拟环境中安装了uWSGI。从virtualenv调用uwsgi二进制文件时,我收到以下错误(在stdout中)

$ /path/to/venv/bin/uwsgi --emperor /etc/uwsgi/vassals

*** Starting uWSGI 2.0.8 (64bit) on [Mon Nov 17 21:18:13 2014] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-11) on 16 November 2014 22:19:09
os: Linux-2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013
nodename: boxname
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/username
detected binary path: /home/username/mydevelopment/venvs/ecodev_do/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 1024
your memory page size is 4096 bytes
detected max file descriptor number: 1024
*** starting uWSGI Emperor ***
*** has_emperor mode detected (fd: 6) ***
[uWSGI] getting INI configuration from ers_portal_uwsgi.ini
Mon Nov 17 21:18:14 2014 - [emperor] curse the uwsgi instance ers_portal_uwsgi.ini (pid: 22724)
Mon Nov 17 21:18:17 2014 - [emperor] removed uwsgi instance ers_portal_uwsgi.ini

uwsgi.log文件显示:

*** Starting uWSGI 2.0.8 (64bit) on [Mon Nov 17 21:25:40 2014] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-11) on 16 November 2014 22:19:09
os: Linux-2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013
nodename: boxname
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /etc/uwsgi/vassals
detected binary path: /home/username/mydevelopment/venvs/ecodev_do/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/username/mydevelopment/git/ers_portal
your processes number limit is 1024
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /home/username/mydevelopment/git/ers_portal/ers_portal_uwsgi.sock fd 3
Python version: 2.7.8 (default, Nov 12 2014, 23:36:57)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]
Set PythonHome to /home/username/mydevelopment/venvs/ecovapor_dev
ImportError: No module named site

然后,阅读他们描述的官方uWSGI文档a scenario,其中uwsgi安装在venv中,但之后必须在系统范围内安装。所以,我用过 pip2.7 install uwsgi(在/usr/local/bin/uwsgi中创建了二进制文件)

我已经尝试了以下所有内容而没有改变错误或输出(有和没有激活venv)..

  1. $ /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals

  2. $ /home/username/mydevelopment/venvs/ecodev_do/bin/uwsgi --emperor /etc/uwsgi/vassals

  3. $ /home/username/mydevelopment/venvs/ecodev_do/bin/uwsgi --no-site --emperor /etc/uwsgi/vassals

  4. $ uwsgi --emperor /etc/uwsgi/vassals

  5. $ uwsgi --no-site --emperor /etc/uwsgi/vassals

  6. $ /path/to/venv/bin/uwsgi ~/mydevelopment/git/ers_portal/ers_portal_uwsgi.ini(.ini文件在/etc/uwsgi/vassals中符号链接)

  7. 这是emperor.ini;

    [uwsgi]
    emperor = /etc/uwsgi/vassals
    uid = username
    gid = username
    logto = /home/username/mydevelopment/git/ers_portal/logs/uwsgiEmperor.log
    

    这是ers_portal_uwsgi.ini;

    [uwsgi]
    master = true
    #user info
    uid = username
    gid = username
    
    #application's base folder
    base = /home/username/mydevelopment/git/ers_portal
    
    #chdir to this folder when starting
    chdir = /home/username/mydevelopment/git/ers_portal
    
    #python module to import
    app = run_web
    module = %(app)
    
    home = /home/username/mydevelopment/venvs/ecovapor_dev
    pythonpath = %(base)
    
    #socket file's location
    socket = /home/username/mydevelopment/git/ers_portal/%n.sock
    
    #permissions for the socket file
    chmod-socket    = 666
    
    #the variable that holds a flask application inside the module imported at line #6
    #uwsgi varible only, does not relate to your flask application
    callable = app
    
    #location of log files
    logto = /home/username/mydevelopment/git/ers_portal/logs/%n.log
    

2 个答案:

答案 0 :(得分:1)

如果有人使用python 3.x,使用pip3安装uwsgi可以解决这个问题:

sudo pip3 install uwsgi

有问题的virtualenv和uwsgi必须使用相同的python版本。

如果您想在同一系统上使用多个python版本,可以获取uwsgi source并按照此处的说明进行操作:http://projects.unbit.it/uwsgi/wiki/MultiPython

然后添加一个"插件= / path /到/ plugin"到.ini文件

请注意,插件不适用于打包的Ubuntu版本(内置单片机),但您需要直接编译源代码以获得完全模块化的二进制文件

答案 1 :(得分:0)

这对我有帮助。 在您的终端中键入它。

unset PYTHONHOME
unset PYTHONPATH