Как исправить ошибку 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 с сохранением активной виртуальной среды.