我在使用 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 的内容?非常感谢任何帮助
最佳答案
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 实例
关于python - 设置PythonHome为/var/www/virtualenvs/myenv/ImportError : No module named site,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752235/