2013-08-24 46 views
24

我目前正在開發我的第一個真正的python flask項目,並且即將設置構建服務器以部署在每次簽入時構建的「最新內部版本」。如何使用virtualenv運行uwsgi

我已經設置了一個啓動腳本,我使用uwsgi啓動應用程序,這部分工作正常。我最近也開始使用virtualenv,並通過這樣做安裝的軟件包被添加到我的項目projectname\flask\Lib\site-packages下。

我使用nginx作爲Web服務器和配置是這樣的:

location/{ try_files $uri @graderbuild; } 
location @graderbuild { 
    include uwsgi_params; 
    uwsgi_param UWSGI_CHDIR /usr/local/grader/build; 
    uwsgi_param UWSGI_PYHOME /usr/local/grader/build; 
    uwsgi_pass 127.0.0.1:3031; 
} 

我使用這個開始uwsgi

exec /usr/local/bin/uwsgi --master --socket 127.0.0.1:3031 
    --wsgi-file restserver.py --callable app --processes 4 --die-on-term 
    --threads 2 >> /var/log/grader-build.log 2>&1 

現在的地方,我知道如果我」米做對了......目前我正在部署整個文件夾到生成服務器。我不想安裝全局python模塊只是爲了讓我的構建工作。對還是錯?

我目前得到的錯誤是:

ImportError: No module named flask_wtf 

如果我是正確的,我該如何配置使用virtualenv站點包安裝?我的首選位置將在startup腳本中,而不是在nginx配置中。

回答

10

由於user995394 pointed出來,有一種方法來告訴uWSGI使用現有的虛擬環境。 但是,當我通過形式virtualenv = /full/path/to/my/virtualenv(它來自INI配置)的uWSGI選項時,它抱怨ImportError: No module named site。我發現的解決方法是,您從virtualenv所在的文件夾啓動uWSGI,並僅傳遞virtualenv = my_virtualenv_name(即路徑相對)。

我使用uWSGI 2.0。

+0

你可以舉一個my_virtualenv-name的具體例子嗎?我使用virtualenvwrapper,並且我已經嘗試了路徑〜/ .virtualenvs/a-virtualenv-created-by-virtualenvwrapper /和名稱a-virtualenv-created-by-virtualenvwrapper,這是行不通的。 – attolee

+0

@attolee,嘗試路徑'〜/ .virtualenvs /'和選項'virtualenv = a-virtualenv-created-by-virtualenvwrapper' – Palasaty

+1

它不起作用。我得到了輸出:'Python版本:2.7.6(默認,2015年6月22日,18:01:27)[GCC 4.8.2] 將PythonHome設置爲〜/ .virtualenvs/ ImportError:沒有模塊名爲site', Python版本:2.7.6(默認,2015年6月22日,18:01:27)[GCC 4.8.2] 將PythonHome設置爲python3.4.3-uwsgi-django1.8-nginx ImportError:No module named site '順便說一下,我也使用pyenv來管理python版本。 – attolee

9

要使用激活的virtualenv您可以在uwsgi.ini使用這個配置片斷:

; If VIRTAL_ENV is set then use its value to specify the virtualenv directory 
if-env = VIRTUAL_ENV 
virtualenv = %(_) 
endif = 
+3

如果您使用virtualenv,這是最好的解決方案,因爲它具有靈活性,可以在不同的環境名稱(生產/分期/開發)中工作! – Alain1405

+3

這應該是被接受的答案。謝啦! – aldesabido

+0

'pipenv'創建動態命名的virtualenvs,所以我懷疑這種方法會越來越普遍,因爲繼續採用'pipenv'。 – paperreduction

相關問題