我在使用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的东西吗?任何帮助都非常感谢
答案 0 :(得分:2)
默认情况下,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实例