Как исправить ошибку ModuleNotFoundError: Нет модуля с именем 'rest_framework' в Ubuntu
Я впервые пытаюсь развернуть приложение django на AWS EC2. Я использую сервер Ubuntu, но случилось так, что пакеты, которые я установил, не распознаются, пакеты уже добавлены в INSTALLED_APPS. Ошибка, которую я получаю:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
django.setup()
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/apps/config.py", line 224, in create
import_module(entry)
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'rest_framework'
Ошибка ссылается на любой пакет, который идет первым в списке INSTALLED APPS. В данном случае первым идет restframework. Если первым в установленных приложениях идет corshearder, то ошибка будет ModuleNotFoundError: No module named 'corsheaders и так далее. Я знаю, что такое поведение происходит потому, что код интерпретируется сверху вниз в файле settings.py. Я установил эти пакеты, используя sudo pip install -r requirements.txt. Когда проблема продолжала возникать, я переустановил пакеты с помощью sudo pip3 install packge_name. Я активировал виртуальную среду перед запуском установок, но ни один из пакетов не был найден. Я не знаю точно, пропустил ли я какие-либо шаги, потому что я очень мало знаю о командах linux. Как мне правильно установить пакеты в переменную envirpment?
Ошибка произошла потому, что вы установили свои зависимости с помощью Sudo.
Это установило ваши зависимости pip только для пользователей Sudo, в то время как вы запускаете ваше приложение Django как пользователь без Sudo. Это причина, по которой вы не увидели свои пакеты, когда делали pip freeze, но увидели их после выполнения sudo pip3 freeze
Для решения этой
задачи- Установите
python3-venvэтой командойsudo apt-get install python3-venv.
- Создайте виртуальную среду
python3 -m venv envэта команда создаст виртуальную среду с именемenv.
- Активируйте виртуальную среду с помощью этой команды
source env/bin/activate
После этого вы увидите (env) перед вашей оболочкой, что указывает на то, что ваша виртуальная среда активирована, теперь нужно установить зависимости внутри этой
cdв ваш файл requirements.txt и введитеpip3 install -r requirements.txtубедитесь, что вы делаете это без sudo (потому что вы будете запускать ваше приложение Django на вашем веб-сервере как пользователь без привилегий sudo по соображениям безопасности)
После этого вы можете запустить ваше приложение Django с сохранением активной виртуальной среды.