【问题标题】:How does a django app start it's virtualenv?django 应用程序如何启动它的 virtualenv?
【发布时间】:2017-03-22 22:15:15
【问题描述】:

我试图了解如何调用虚拟环境。我负责管理的网站有一个 .venv 目录。当我 ssh 进入该站点进行处理时,我知道我需要使用源 .venv/bin/activate 来调用它。我的问题是:Web 应用程序如何调用虚拟环境?我怎么知道它使用的是 .venv,而不是全局 python?

更多细节:这是一个带有 Django 的 Drupal 网站。 Apache它的主服务器。我相信 Django 是由 gunicorn 服务的。设计师离开小镇 _

【问题讨论】:

  • 视情况而定,但应用程序无法启动自己的环境。您是否与设置网站的人交谈过?它在运行什么?
  • 这很可能在您的网络服务器配置中。你用的是哪一个?
  • 我在 gconf.py 文件中看不到任何东西,这是 gunicorn 设置(我认为)。 Apache 首先启动,因为它驱动主要的 Drupal 站点,而我在 Apache2.conf 中看不到任何东西。我只是感到震惊,如果 .venv 被放在那里,它必须以某种方式调用。

标签: django virtualenv


【解决方案1】:

好的,我发现在我的例子中,virtualenv 是如何为 django 调用的。

BASE_DIR/run/gunicorn 脚本有:

#GUNICORN='/usr/bin/gunicorn'
GUNICORN=".venv/bin/gunicorn"
GUNICORN_CONF="$BASE_DIR/run/gconf.py"
.....
$GUNICORN --config $GUNICORN_CONF --daemon --pid $PIDFILE $MODULE

所以这会将我们带到 gunicorn 脚本开头的 .venv:

#!/media/disk/www/aavso_apps/.venv/bin/python

【讨论】:

    【解决方案2】:

    在 virtualenv 中调用 python 时使用绝对路径即可。
    例如,您的 virtualenv 位于 /var/webapps/yoursite/env
    所以你必须叫它/var/webapps/yoursite/env/bin/python

    【讨论】:

      【解决方案3】:

      如果你只在反向代理后面使用 Django,Django 将使用在 which python 命令中确定的启动服务器的用户的任何 python 环境。如果您使用像 Gunicorn 这样的管理工具,您可以指定在这些配置中使用哪个环境。虽然 Gunicorn 本身要求我们在调用 Gunicorn 之前激活虚拟环境 编辑: 由于您使用的是 Gunicorn,请看一下,https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-apps-using-gunicorn-http-server-behind-nginx

      【讨论】:

      • 感谢您的参考。但是通读它,我看不到网站调用 virtualenv 的位置。在他们的情况下,他们拥有 Nginx 而不是 gunicorn。我在 gunicorn 上运行 Apache。而且我的 Apache conf 没有提及环境。也许它的设置更早,随着服务器的启动?
      • 再看一遍,没有明确提到,但是你需要在启动gunicorn之前激活你的虚拟环境。
      猜你喜欢
      • 1970-01-01
      • 2012-11-10
      • 2016-10-31
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      相关资源
      最近更新 更多