如何让 mod_wsgi 获取我的 virtualenv

问题描述 投票:0回答:4

我对使用 Flask 还很陌生 -

根据http://flask.pocoo.org/docs/0.12/deploying/mod_wsgi/

在“使用虚拟环境”标题下 我读到:

对于 Python 3,将以下行添加到 .wsgi 文件的顶部:

activate_this = '/path/to/env/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this)) This sets up the load paths according to the settings of the virtual environment.

请记住,路径必须是绝对的。

要激活我的 venv,我使用 linux 中的命令:

 my_env/bin/activate

我查看了 my_env/bin/ 目录,没有看到任何 .py 文件。 我是否应该在 my_env/bin/ 中创建一个 .py 文件,该文件将由 .wsgi 文件调用?

python flask virtualenv mod-wsgi
4个回答
13
投票

我也遇到了同样的问题,解决方案实际上很简单。您需要安装

libapache2-mod-wsgi-py3
而不是
libapache2-mod-wsgi
。后者适用于 python 2。

然后,您可以通过将环境的站点包添加到系统路径来激活您的环境。例如,对于我(使用 venv),我可以通过将以下行添加到我的

*.wgsi
文件中来完成此操作。

sys.path.insert(0,"/path/to/venv/lib/python3.8/site-packages")

9
投票

如果您使用 mod_wsgi,请阅读以下文档:

总长:

From Documentation - to use a Python virtual environment, all you need to do is add the python-home option to the WSGIDaemonProcess directive resulting in

将此行添加到您的虚拟主机以启用 virtualenv

WSGIDaemonProcess  application_name python-home=/path/to/app/venv


4
投票

我发现的最好、最干净的方法,无需使用晦涩的脚本做一些“魔法”,就是简单地以对环境中的 python 解释器的引用来开始 .wsgi。只需用这个启动你的 .wsgi ,之后就不需要摆弄了:

#!/path/to/your/venv/bin/python

我希望在花费数小时的时间之前考虑一下这个简单的解决方案 - 并希望其他人提到过它。


0
投票

设置 python-homepython-path 和/或直接在 wsgi.py 中设置路径对我来说不起作用。我的 venv(在 Ubuntu 20 上)使用的是 Python3.11,但我在 Apache 的错误日志中看到它仍在运行我的服务器的默认 Python 3.8 安装,尽管它似乎将库放在正确的文件夹中。

我必须通过 pip 从 Python venv 安装 mod wsgi,并将其配置以及本地模块的路径复制/粘贴到 Apache2 :

  1. 删除 Apache 发行版的默认 mod_wsgi 模块: sudo a2dismod wsgi
  2. 安装 apache2-dev : apt-get install apache2-dev
  3. 从 virtualenv 中安装 mod_wsgipip install mod_wsgi
  4. 仍然从 venv 运行以下命令 mod_wsgi-express module-config
  5. 将输出(本地模块的绝对路径)复制粘贴到apache2.conf

例如:

LoadModule wsgi_module "/my_path_to_venv/lib/python3.11/site-packages/mod_wsgi/server/mod_wsgi-py311.cpython-311-x86_64-linux-gnu.so"
WSGIPythonHome "/my_path_to_venv"
© www.soinside.com 2019 - 2024. All rights reserved.