В Python 3.7, Django3.1.1, Apache / 2.4.46 (cPanel) выдает ошибку: AttributeError: объект ‘module’ не имеет атрибута ‘lru_cache’

#python #django #cpanel #mod-wsgi #django-wsgi

#python #django #cpanel #мод-wsgi #django-wsgi

Вопрос:

Я новичок в развертывании проекта Django на cpanel. Моя cpanel была на python 2.7, но моему проекту нужен python3.7, поэтому я установил отдельную версию python 3.7 на cpanel, следуя этому руководству https://sysally.com/blog/install-python-3-x-whm-cpanel-server / .После успешной установки python 3.7 я последовал этому руководству, чтобы разместить свой проект на cpanel https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-python-wsgi-application / Сначала я получал эту ошибку «ImportError: нет модуляс именем django.core.wsgi», которую я решил, добавив путь к моей виртуальной среде в wsgi.py файл , теперь мой проект wsgi.py файл выглядит следующим образом

 import os, sys

# add the virtualenv site-packages path to the sys.path
sys.path.append('/home/***/public_html/app/unltdenv/lib/python3.7/site-packages')


from django.core.wsgi import get_wsgi_application


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'unltdsample.settings')

application = get_wsgi_application()
  

Теперь я получаю эту ошибку

 Traceback (most recent call last):
  File "/opt/cpanel/ea-ruby24/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 369, in <module>
    app_module = load_app()
  File "/opt/cpanel/ea-ruby24/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 76, in load_app
    return imp.load_source('passenger_wsgi', startup_file)
  File "/home/umadmin/public_html/app/unltd/passenger_wsgi.py", line 1, in <module>
    from unltdsample.wsgi import application
  File "/home/umadmin/public_html/app/unltd/unltdsample/wsgi.py", line 19, in <module>
    from django.core.wsgi import get_wsgi_application
  File "/home/umadmin/public_html/app/unltdenv/lib/python3.7/site-packages/django/__init__.py", line 1, in <module>
    from django.utils.version import get_version
  File "/home/umadmin/public_html/app/unltdenv/lib/python3.7/site-packages/django/utils/version.py", line 71, in <module>
    @functools.lru_cache()
AttributeError: 'module' object has no attribute 'lru_cache'
  

я искал об этом, и я обнаружил, что проблема заключается в несоответствии версии wsgi python. И, выполнив эти команды, я могу исправить эту проблему

 $ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3
  

но когда я запускаю эту команду в терминале, я получаю

 "sudo: apt-get: command not found"
  

когда я запускаю это с помощью yum, я получаю

 No Match for argument: libapache2-mod-python
No Match for argument: libapache2-mod-wsgi
No Packages marked for removal
  

я также попытался установить pip install mod-wsgi в своей виртуальной среде, которую он успешно установил, но ошибка не устранена.
может ли какой-либо орган помочь мне решить эту проблему..

Сведения о системе :

Python 3.7.0 (по умолчанию, сентябрь 29 2020, 12:40:13) [ GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Версия Django: 3.1.1

Версия сервера: Apache / 2.4.46 (cPanel) Сервер построен: 22 сентября 2020 19:31:16

Комментарии:

1. вы все еще используете python 2.7, поскольку метод lru_cache реализован в python 3

2. Я установил все библиотеки в python 3.7 в виртуальной среде, как и в вопросе, я показал версию моего python 3.7. И да, это правда, что python 2.7 также установлен по умолчанию на cpanel, и я думаю, что это создает какой-либо конфликт, @iklinac можете ли вы предложить какое-либо решение?