如何使用virtualenv运行uwsgi

Ask*_*ken 41 python virtualenv flask uwsgi

我目前正在开发我的第一个真正的python烧瓶项目,并且即将设置构建服务器以部署每次签入时构建的"最新构建".

我已经设置了一个启动脚本,我使用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;
}
Run Code Online (Sandbox Code Playgroud)

我开始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
Run Code Online (Sandbox Code Playgroud)

现在到我知道我做得对的地方......目前我正在将整个文件夹部署到构建服务器.我不想安装全局python模块只是为了让我的构建工作.对还是错?

我目前得到的错误是:

ImportError: No module named flask_wtf
Run Code Online (Sandbox Code Playgroud)

如果我是对的,如何配置设置以使用virtualenv站点包?我首选的位置是在startup脚本中,而不是在nginx配置中.

iMo*_*om0 53

使用-H设定的virtualenv到Python路径.

uwsgi -H /path/to/your/virtualenv 
Run Code Online (Sandbox Code Playgroud)

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

  • 有相同的导入错误:`ImportError:没有模块名为site`.原来我只提供了virtualenv的名字,但你需要提供**完整路径** (7认同)
  • 它改变但现在我得到:`ImportError:没有名为site`的模块.你知道那可能是什么吗? (3认同)

Bea*_*eau 17

要使用激活的virtualenv,您可以在以下位置使用此配置代码段uwsgi.ini:

; If VIRTUAL_ENV is set then use its value to specify the virtualenv directory
if-env = VIRTUAL_ENV
virtualenv = %(_)
endif =
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用virtualenv,这是最佳解决方案,因为它还具有在不同环境(生产/登台/开发)中使用不同venv名称的灵活性! (3认同)
  • 这应该是公认的答案.谢啦! (3认同)

Pal*_*aty 11

正如user995394所指出的那样,有一种方法可以告诉uWSGI使用现有的虚拟环境.但是,当我在表单中传递uWSGI选项时virtualenv = /full/path/to/my/virtualenv(它来自INI配置),它会抱怨ImportError: No module named site.我找到的解决方法是从你的virtualenv所在的文件夹启动uWSGI并且只传递virtualenv = my_virtualenv_name(即路径是相对的).

我使用uWSGI 2.0.


Yar*_*nko 8

其他人的答案没有帮助,我将 virtualenv 的路径添加到 uwsgi.ini 配置文件中。错误消失了。

pythonpath = /path-to-virtualenv/project/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)