Apache2 on Ubuntu gives Py_Initialize ImportError: No module named encodings

Apache2 on Ubuntu gives Py_Initialize ImportError: No module named encodings

我正在使用 Apache2 Ubuntu Python 3.6.1。我按照此处的说明使用 Django 和 mod_wsgi 进行设置:How To Serve Django Applications with Apache and mod_wsgi on Ubuntu 14.04

我看了很多类似的问题,但仍然无法解决问题。 Apache 错误日志不断喷出“ImportError:没有名为 '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 时,它等于我在上面的 WSGIPython 路径中的内容。

是的,我已经激活了虚拟环境。 对于我的环境变量,我有:

    PATH = /home/user/myproject/myprojectenv/bin:$PATH
    PYTHONPATH = /home/user/myproject/myprojectenv/bin:$PYTHONPATH
    PYTHONHOME = not set

我尝试了设置和未设置环境变量的各种组合。 None 我试过的有效。

当我按照上述 link 中的步骤操作时,我不确定是否为 Python 3.6.1 构建了新的 mod_wsgi。我曾尝试(在我的 VM 的另一个副本上)显式构建一个 Python 共享库并用它构建 mod_wsgi。它惨遭失败。我犹豫是否要再次走那条路,除非我确定那是我需要做的。

非常感谢任何帮助。

我确实通过了这个错误。正如@Alasdair 指出的那样,我确实需要使用共享库构建 Python,然后使用该版本的 Python 构建 mod_wsgi。我按照这里的指示操作:Compiling mod_wsgi for a custom Python Build

唯一的区别是我需要在 'make install' 之前添加 'sudo' 以便将模块放在 /usr/bin/apache2/modules 目录中的权限很好。

我还需要确保 LD_LIBRARY_PATH 识别了 python 库(我收到 "error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory" 错误)。使用 'ldconfig'.

清除了该错误

我仍然遇到 Apache 问题,我将单独写出来,但这让我通过了 'encodings' 问题。