我对使用 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 文件调用?
我也遇到了同样的问题,解决方案实际上很简单。您需要安装
libapache2-mod-wsgi-py3
而不是 libapache2-mod-wsgi
。后者适用于 python 2。
然后,您可以通过将环境的站点包添加到系统路径来激活您的环境。例如,对于我(使用 venv),我可以通过将以下行添加到我的
*.wgsi
文件中来完成此操作。
sys.path.insert(0,"/path/to/venv/lib/python3.8/site-packages")
如果您使用 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
我发现的最好、最干净的方法,无需使用晦涩的脚本做一些“魔法”,就是简单地以对环境中的 python 解释器的引用来开始 .wsgi。只需用这个启动你的 .wsgi ,之后就不需要摆弄了:
#!/path/to/your/venv/bin/python
我希望在花费数小时的时间之前考虑一下这个简单的解决方案 - 并希望其他人提到过它。
设置 python-home 和 python-path 和/或直接在 wsgi.py 中设置路径对我来说不起作用。我的 venv(在 Ubuntu 20 上)使用的是 Python3.11,但我在 Apache 的错误日志中看到它仍在运行我的服务器的默认 Python 3.8 安装,尽管它似乎将库放在正确的文件夹中。
我必须通过 pip 从 Python venv 安装 mod wsgi,并将其配置以及本地模块的路径复制/粘贴到 Apache2 :
例如:
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"