【问题标题】:Django Apache 2 ModuleNotFoundError: No module named 'django'Django Apache 2 ModuleNotFoundError:没有名为“django”的模块
【发布时间】:2021-09-30 22:21:29
【问题描述】:

我正在尝试在 apache2 上部署我的 django 应用程序,我在 AWS ec2 ubuntu 实例上。最初我收到一个致命的 Python 错误:Py_Initialize: Unable to get the locale encoding,所以我通过删除我的 env 并在 3.6 上启动一个新的虚拟 env 将我的 python 从 2.7 切换到 3.6,我还从我的实例中清除了 python 2.7 和 3.7。之后,我的 apache 中有一个名为“Django 错误”的模块。任何帮助都被困在这一段时间了:)。

<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /home/ubuntu/pydjangoenv/myproj
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/ubuntu/pydjangoenv/myproj/static
<Directory /home/ubuntu/pydjangoenv/myproj/static>
Require all granted
</Directory>
<Directory /home/ubuntu/pydjangoenv/myproj/myproj>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproj python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2

WSGIScriptAlias / /home/ubuntu/pydjangoenv/myproj/myproj/wsgi.py
</VirtualHost>

当我运行 pip3 install django 时,我的 django 在 要求已经满足:/home/ubuntu/pydjangoenv/venv2/lib/python3.6/site-packages (3.2.5)中的django

【问题讨论】:

    标签: python django ubuntu apache2 mod-wsgi


    【解决方案1】:

    一旦您配置了您的 EC2 实例,我将假设您需要此服务器中的后端和前端,通过 shell 访问该实例。然后运行:

    从 Ubuntu 更新软件包:

    sudo apt-get update
    

    安装 Python:

    sudo apt-get install python3.6
    

    安装pip

    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    python get-pip.py
    

    然后需要安装虚拟环境,可以使用virtualenv

    pip install virtualenv
    

    创建一个虚拟环境:

    virtualenv mynewvenv
    

    然后进入venv:

    source mynewvnev/bin/activate
    

    进入 vnev 后,运行它来安装 Django:

    pip install django
    

    然后我建议将您的 Django 项目上传到 GitHub 或 GitLab,然后克隆该存储库。

    如果您使用自定义域进行重定向,更新您的settings.py 非常重要,尤其是ALLOWED_HOSTS

    ALLOWED_HOSTS = ['yourdomain.com',
                     'www.yourdomain.com',]
    

    如果需要,更新您的数据库访问权限也非常重要,如果您使用默认 sqlite3 运行数据库,请确保数据库名称、用户和密码与您的实际信息匹配。

    如果上述操作正确,请尝试将 Apache config 文件中的 WSGI 部分更新为如下所示:

    WSGIPassAuthorization On
    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
    WSGIDaemonProcess yourapp python-home=/usr/local/venvs/yourapp
    WSGIProcessGroup DjangoMainAppName
    

    错误很可能在这一行:

    WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2
    

    尝试更改为:

    WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2/lib/python3.6/site-packages
    

    使用准确的 Python 版本。

    您可以阅读如何正确配置 Django 应用程序的 config 文件,并为单个应用程序 here 使用守护程序模式。

    【讨论】:

    • 是的,在我做出更改后,我又回到了原来的错误:致命的 Python 错误:Py_Initialize:无法获取语言环境编码 ModuleNotFoundError:没有名为“编码”的模块
    • 尝试运行命令:unset PYTHONHOMEunset PYTHONPATH
    【解决方案2】:

    我能够通过更改为 python 3.6 来让我的网站通过 apache 运行,方法是使用 python 3.6 重新安装要求创建一个新的虚拟环境,然后我使用 sudo apt-get remove libapache2- 卸载 libapache2-mod-wsgi-py3- mod-wsgi-py3,然后我在我的 python 3.6 虚拟环境中再次安装它,然后网站就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2017-08-15
      • 2021-11-17
      • 2019-03-08
      • 2021-08-06
      • 2018-08-22
      • 2019-11-28
      • 2018-11-03
      相关资源
      最近更新 更多