【问题标题】:Flask+Nginx+uWSGI : ImportError: No module named siteFlask+Nginx+uWSGI:ImportError: No module named site
【发布时间】:2013-05-12 09:15:53
【问题描述】:

我按照http://www.reinbach.com/uwsgi-nginx-flask-virtualenv-mac-os-x.html链接的教程安装,执行命令uwsgi --ini deploy/deploy.ini时,终端提示导入错误:

PYTHONHOME 设置为/virtualenv/sample/

ImportError: No module named site

我已将PYTHONHOMEPYTHONPATH 设置为

export PYTHONPATH=$PYTHONPATH:/Library/Python/2.7/site-packages
export PYTHONHOME=$PYTHONHOME:/Library/Python/2.7

我无法弄清楚它有什么问题。

有人可以帮我解决这个问题吗?

如果有帮助,终端中的全部信息如下所示:

(env)ios-devmatoMacBook-Pro:hello ios_dev$ uwsgi --ini deploy/deploy.ini
[uWSGI] getting INI configuration from deploy/deploy.ini
*** Starting uWSGI 1.9.10 (64bit) on [Fri May 17 16:42:22 2013] ***
compiled with version: 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) on 17 May 2013 12:41:07
os: Darwin-11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-
1699.32.7~1/RELEASE_X86_64
nodename: ios-devmatoMacBook-Pro.local
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /Users/ios_dev/Desktop/sample/hello
detected binary path: /Users/ios_dev/Documents/little/little-web/little_web_dev/env/bin/uwsgi
your processes number limit is 709
your memory page size is 4096 bytes
detected max file descriptor number: 256
lock engine: OSX spinlocks
uwsgi socket 0 bound to TCP address 127.0.0.1:3031 fd 3
Python version: 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)  [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]

PYTHONHOME 设置为/virtualenv/sample/

ImportError: No module named site

【问题讨论】:

  • 你为什么要设置 PYTHONHOME?它也应该是一个目录,而不是像你正在做的那样表示为路径。里面的空条目和冒号会搞砸的。
  • 请发布您的deploy/deploy.ini 脚本的内容。
  • @Graham Dumpleton:我在链接的教程中看到有一个 pythonhome 设置语句,所以我只是将它复制到我的文件中。但我不确定是否需要。
  • @kisamoto 这里是 deploy.ini [uwsgi] socket = 127.0.0.1:3031 processes = 2 virtualenv = /virtualenv/sample/ module = myapp callable = app touch-reload = /virtualenv 的内容/示例/你好/

标签: python nginx flask uwsgi


【解决方案1】:

这是我在尝试Django and NGINX tutorial — uWSGI 2.0 documentation 时遇到的相同错误消息(ImportError: No module named site) 的解决方法。

停用虚拟环境:

deactivate

在系统范围内安装 uWSGI(如果尚未在系统范围内安装)

sudo pip install uwsgi

编辑uwsgi.ini 文件。我用以下代码注释掉了这一行:

home = /path/to/virtualenv

运行uWSGI --ini mysite_uwsgi.ini

【讨论】:

  • 我不知道你为什么要删除 home 指令。这绝对不是正确答案。 home 指令告诉 uwsgi 使用哪个 virtualenv。因此,只有在不使用虚拟环境时才将其删除。 ImportError 一般表示在定义的 virtualenv 中找不到模块,所以要确保它存在并且模块确实存在。
  • 我回滚了您的编辑 - 如果您想删除答案,请使用左下角的“删除”链接(编辑旁边)删除。不要破坏您自己的帖子。
【解决方案2】:

我阅读了很多关于这个问题的文件,但没有得到答案。

巧合的是,我通过以 root 身份编辑 uid 和 gid 来解决此问题。

这似乎是一个权限问题。我不知道为什么,但它只是工作。请记住,以 root 身份运行产品环境是非常不安全的。

【讨论】:

  • 如果没有正确的权限,您将无法导入模块。要解决此问题,请使用chown -R user:group /path/to/env,以便为环境设置正确的所有者和组,并根据需要设置权限。
【解决方案3】:

1、激活你使用的虚拟

2、 pip install uwsgi

这是关键动作,然后是

command -v wsgi

显示这个

/virtual-path/bin/uwsgi

3、使用当前用户运行uwsgi,因为其他用户没有激活virtualenv

【讨论】:

    【解决方案4】:

    我的情况是我没有使用 virtualEnv。只需使用 django + ngnix。我的解决方案是将 HOME 变量删除到 *.ini 配置文件中:

    sudo nano /etc/uwsgi/sites/c_app.ini

    [uwsgi]
        project = c_app
        uid = ubuntu
        base = /home/%(uid)
    
        chdir = %(base)/%(project)
        **home = %(base)/%(project)** (REMOVED IT)
        module = %(project).wsgi:application
    
        master = true
        processes = 5
    
        socket = /run/uwsgi/%(project).sock
        chown-socket = %(uid):www-data
        chmod-socket = 660
        vacuum = true
    

    然后就可以了。

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 2015-05-08
      • 2016-06-13
      • 1970-01-01
      • 2017-02-20
      • 2021-07-20
      • 2015-04-02
      • 2020-08-08
      相关资源
      最近更新 更多