web-dev-qa-db-ja.com

virtualenvでuwsgiを実行する方法

私は現在、私の最初の本当のpython flask=プロジェクトを開発していて、ビルドサーバーをセットアップして、チェックイン。

Uwsgiを使用してアプリケーションを起動する起動スクリプトを設定しましたが、この部分は正常に機能しています。最近virtualenvの使用を開始しました。これにより、インストールされたパッケージがプロジェクトのprojectname\flask\Lib\site-packages

Webサーバーとしてnginxを使用していますが、構成は次のようになります。

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

今私はそれを正しくやっているかどうかを知っている場所に...現在、フォルダ全体をビルドサーバーに展開しています。ビルドを機能させるためだけにglobal pythonモジュールをインストールしたくありません。

現在私が得るエラーは次のとおりです。

ImportError: No module named flask_wtf

正しい場合は、virtualenvサイトパッケージを使用するようにセットアップを構成するにはどうすればよいですか?私の優先する場所は、startup構成ではなく、nginxスクリプト内です。

40
Asken

つかいます -H = virtualenvをpythonパスに設定します。

uwsgi -H /path/to/your/virtualenv 

http://uwsgi-docs.readthedocs.org/en/latest/Options.html#virtualenv

51
iMom0

有効化されたvirtualenvを使用するには、この設定スニペットをuwsgi.ini

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

User995394 pointed outとして、uWSGIが既存の仮想環境を使用するように指示する方法があります。ただし、uWSGIオプションをvirtualenv = /full/path/to/my/virtualenvの形式(INI config)から)で渡すと、ImportError: No module named siteについて文句を言います。 virtualenvはvirtualenv = my_virtualenv_nameだけを渡します(つまり、パスは相対です)。

私はuWSGI 2.0を使用しています。

11
Palasaty

数か月前にこの問題を抱えていましたが、nginx、Linuxのupstartで自動的に起動するuwsgiなどのデモ構成の完全な例があります。

https://stackoverflow.com/a/27221427/567606

1
tourdownunder

他の人の答えは役に立たず、virtualenvへのパスをuwsgi.ini構成ファイルに追加しました。エラーが消えました。

pythonpath = /path-to-virtualenv/project/lib/python2.7/site-packages
1