【发布时间】:2023-03-15 05:49:01
【问题描述】:
我正在使用 Apache2、Python 3.6.1 开发 Ubuntu。我按照此处的说明使用 Django 和 mod_wsgi 进行设置:How To Serve Django Applications with Apache and mod_wsgi on Ubuntu 14.04
我查看了很多类似的问题,但仍然无法正常工作。 Apache 错误日志显示“ImportError: No module named 'encodings' 几乎不断。
以下是我的 Apache2 文件中的相关设置:
在 000-default.conf 中:
WSGIDaemonProcess myproject python-home=/home/user/myproject/myprojectenv/ python-path=/home/user/myproject/myprojectenv/bin/python
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myprojectenv/myproject/myproject/wsgi.py
在 apache2.conf 中:
WSGIPythonPath /home/user/myproject/myprojectenv
请注意,当我检查 sys.prefix 时,它等于我在上面的 WSGIPythonPath 中的值。
是的,我已经激活了虚拟环境。 对于我的环境变量,我有:
PATH = /home/user/myproject/myprojectenv/bin:$PATH
PYTHONPATH = /home/user/myproject/myprojectenv/bin:$PYTHONPATH
PYTHONHOME = not set
我尝试了设置和未设置环境变量的各种组合。我试过的都没有用。
当我按照上面链接中的步骤操作时,我不确定是否为 Python 3.6.1 构建了一个新的 mod_wsgi。我曾尝试(在我的 VM 的另一个副本上)显式构建 Python 共享库并使用它构建 mod_wsgi。它惨败。除非我确定那是我需要做的,否则我会犹豫再次走那条路。
非常感谢任何帮助。
【问题讨论】:
-
python 路径上的目录应该包含 python 可以加载的模块。在 Python 补丁中拥有一个
bin二进制文件目录是没有意义的。您链接到的教程显示使用WSGIDaemonProcess myproject python-path=/home/user/myproject python-home=/home/user/myproject/myprojectenv- 将python-path设置为项目,将python-home设置为虚拟环境。 -
如果您安装
libapache2-mod-wsgi-py3并为您的 Ubuntu 版本使用默认的 Python 3(您尚未说明您使用的是哪个版本),则无需编译 mod_wsgi -
原本我们使用的是自己安装的 Python 3.6.1,但我切换到虚拟环境并使用那里安装的 python 3.6.1。我最初像教程一样设置了 python-path,但已经尝试了很多方法来让它工作。我会切换回那个,然后再试一次。谢谢@Alasdair
-
@Alasdair - 我更改了文件并重新启动 apache,但我得到了同样的错误。
-
Ubuntu 14.04。这就是我安装wsgi的方式,所以应该没问题。可能是我们使用的是 Python 3.6.1 而不是 3.4,它似乎是默认安装的最新版本。
标签: python django apache2 wsgi