2016-01-12 43 views
3

我很難用python3.4和virtualenv。將PythonHome設置爲/ var/www/virtualenvs/myenv/ImportError:沒有模塊名爲site

項目在本地運行良好,但一旦部署,我得到502壞網關。我看着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

看起來像你的服務器上運行的是錯誤版本的Python:'Python版本:2.7.9' – Pyrce

+0

@Pyrce該死的你是對的..但任何想法如何解決這個問題? – doniyor

+2

我猜你的默認python和/或你設置的虛擬env是錯誤的版本。你可以嘗試別名python =/usr/local/bin/python3.4你的python爲啓動服務的用戶使用,或者爲你的服務器改變默認的'python'(如果其他應用程序依賴於2.7,可能會有風險) )。你一定要用2.7來燒燬你的virtualenv設置並重建它。 – Pyrce

回答

2

uWSGI正在使用python插件來運行您的應用程序。不幸的是,用於從你的應用程序virtualenv構建uWSGI插件和python版本的python版本必須匹配(在第一個和第二個數字上)。

默認情況下,python插件被嵌入到uWSGI二進制文件中。在上面的例子中,它是使用python 2.7構建的。

你可以用兩種可能的方法解決它。第一個是使用不同的python版本編譯uWSGI,第二個是不使用python插件構建uWSGI,並分別構建python插件(使用不同的python版本)。

對於每一個,你將需要uWSGI來源。

爲建設uWSGI不同Python版本,所有你需要做的是:

PYTHON=python3.4 make 

爲建設uWSGI沒有蟒蛇插件(和其他一些插件):

make nolang 

爲建設uWSGI蟒蛇插件(你必須有沒有插件的uWSGI已經建成)

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

現在,你可以c OPY你的插件(縣)的一些全局位置(例如/usr/local/lib/uwsgi),更換uWSGI二進制文件系統和啓動uWSGI服務器:

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

若要加載插件的運行uWSGI實例爲Python 3.5

相關問題