【问题标题】:Apache2 on Ubuntu gives Py_Initialize ImportError: No module named encodingsUbuntu 上的 Apache2 给出 Py_Initialize ImportError: No module named encodings
【发布时间】: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


【解决方案1】:

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

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

我还需要确保 LD_LIBRARY_PATH 能够识别 python 库(我收到“加载共享库时出错:libpython3.6m.so.1.0:无法打开共享对象文件:没有这样的文件或目录”错误)。该错误已通过使用“ldconfig”清除。

我还有一个 Apache 问题,我会单独写出来,但这让我通过了“编码”问题。

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 2017-03-03
    • 1970-01-01
    • 2020-04-23
    • 2015-05-08
    • 2017-07-01
    • 2019-04-03
    • 2017-02-01
    • 2017-03-16
    相关资源
    最近更新 更多