将PythonHome设置为/ var / www / virtualenvs / myenv / ImportError:没有名为site的模块

时间:2016-01-12 19:30:22

标签: python django python-3.x uwsgi

我在使用python3.4和virtualenv时非常困难。

项目在本地运行良好,但一旦部署,我将获得502 Bad Gateway。我查看了uwsgi日志,我看到了这个:

uwsgi socket 0 bound to UNIX address /var/www/mysite/live.sock fd 6 
Python version: 2.7.9 (default, Mar  1 2015, 13:01:26)  [GCC 4.9.2] 
Set PythonHome to /var/www/virtualenvs/myenv/ 
ImportError: No module named site

我的uwsgi设置是:

[uwsgi]
socket = /var/www/mysite/live.sock
chdir = /var/www/mysite
module = project.wsgi:application
virtualenv = /var/www/virtualenvs/myenv/
buffer-size = 4096
processes = 40
home = /var/www/virtualenvs/myenv/
plugin = python34
env = DJANGO_SETTINGS_MODULE=project.settings
enable-threads = True
single-interpreter = True
uid = www-data
gid = www-data
vacuum = True
disable-logging = true
logger = file:/var/www/mysite/log/uwsgi_err.log
我错过了关于python3的东西吗?任何帮助都非常感谢

1 个答案:

答案 0 :(得分:2)

uWSGI正在使用python插件来运行您的应用程序。不幸的是,用于构建uWSGI插件的python版本和你的应用程序virtualenv的python版本必须匹配(在第一和第二位)。

默认情况下,python插件嵌入在uWSGI二进制文件中。在上面的例子中,它是使用python 2.7构建的。

您可以通过两种可能的方式修复它。第一个是使用不同的python版本编译uWSGI,第二个是使用python插件构建uWSGI并分别构建python插件(使用不同的python版本)。

对于每一项,您将需要uWSGI来源。

要使用不同的python版本构建uWSGI,您需要做的就是:

PYTHON=python3.4 make

用于构建没有python插件(以及其他一些插件)的uWSGI:

make nolang

用于构建uWSGI python插件(你必须拥有没有已经构建的插件的uWSGI)

PYTHON=python3.4 ./uwsgi --build-plugin "plugins/python python34"

现在,您可以将插件复制到某个全局位置(例如/usr/local/lib/uwsgi),替换系统中的uWSGI二进制文件并使用以下命令启动uWSGI服务器:

plugins-dir = /usr/local/lib/uwsgi
plugin = python35

使用加载的python 3.5插件运行uWSGI实例