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

010*_*101 18 python virtualenv flask uwsgi

(关于SO的其他帖子类似,但没有一个具有uwsgi + Flask + virtualenv的特定组合)(这一个是最接近的)

我通过apt-get安装了uwsgi.我也试过pip install wsgi.两个人都给了我同样的问题.

测试命令:

sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H myvirtualenv
Run Code Online (Sandbox Code Playgroud)

结果:

Python version: 2.7.4 (default, Apr 19, 2013, 18:35:44)  [GCC 4.7.3]
Set PythonHome to myvirtualenv
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)

我可以在虚拟环境中运行我的应用程序.

JRa*_*jan 23

虚拟环境的路径是错误的.这是这个错误的原因.

我正在使用virtualenvwrapper,我的虚拟环境设置在〜/ .virtualenvs.所以在我的情况下,uwsgi调用看起来像

sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H ~/.virtualenvs/myapp
Run Code Online (Sandbox Code Playgroud)

希望这有助于下次有人来寻找这个.

感谢Cody在评论中指出它.


hug*_*hes 21

请先查看@JRajan的答案.

如果您确定只想抑制错误并且实际上没有解决根本问题,请将鼠标悬停在下方.

添加--no-site到您的命令或no-site=true您的uwsgi.ini文件.

  • 我怀疑这实际上解决了你的问题."无模块命名..."导入错误通常意味着uwsgi没有正确的virtualenv路径.no-site标志将阻止virtualenv加载site-packages.所以你不再得到错误,但uwsgi也无法访问你的python virtualenv或任何网站包.检查你的路径!编辑:发布后代.我昨天花了8个小时这个... (10认同)
  • @hughes顺便说一下'--no-site'是什么意思? (3认同)

lui*_*lhl 13

在我的情况下,问题是uWSGI试图使用的python版本.

我的项目是用python 3.4编写的,但我没有在uWSGI配置中指定它.所以uWSGI试图使用python 2并尝试从virtualenv中的文件夹lib/python2.7导入模块.

所以我收到了'No module named site'错误,因为所有的模块,包括站点模块,里面的lib/python3.4,而不是lib/python2.7.

为了解决这个问题,我必须做两件事:

  • 安装uWSGI的python3插件,包括:
    apt-get install uwsgi-plugin-python3

  • 在.ini配置文件中使用它,包括:
    plugins = python34

希望这可以帮助将来遇到同样问题的人.

根据要求,这里是我的.ini文件:

[uwsgi]
base = /your/app/path

pythonpath = %(base)
module = your_module_name

callable = app #Here you put the name of the variable which holds your app inside your module

home = /your/virtualenv/path
plugins = python34

master = true
processes = 2

uid = www-data
gid = www-data

socket = /path/to/socket
chmod-socket = 660

die-on-term = true

logto = /var/log/uwsgi/%n.log
Run Code Online (Sandbox Code Playgroud)


小智 8

我以前遇到过类似的问题.我的问题是我的ubuntu系统上有python2.x和python3.x,我希望我的项目在安装了python3环境的虚拟环境中运行.我是如何解决这个问题的:

apt-get install python3-pip

pip3安装uWSGI

就这样.