ImportError: Не удалось импортировать Django в виртуальное окружение?
Я создал проект django, установил виртуальную среду и добавил django с помощью poetry add.
внутри pyproject.toml:
[tool.poetry.dependencies]
python = "^3.9"
psycopg2-binary = "^2.9.3"
Django = "^4.0.1"
Когда я выполняю команду для создания приложения:
p manage.py startapp users apps/users
Я получаю эту ошибку:
(base) ┌──(venv)─(tesla㉿kali)-[~/Documents/projects/graphql/graphenee]
└─$ p 1 ⨯
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'
>>>
venv установлен, активирован, django установлен, но я все еще получаю эту ошибку. Внутри виртуальной среды я запускаю оболочку python и получаю эту ошибку:
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'
Django также установлен глобально, и когда я запускаю оболочку python в глобальном окружении, я могу импортировать django:
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
Похоже, что вы вручную создали виртуальный env в каталоге проекта, например, python -m venv venv. Так что теперь у вас есть один в /home/tesla/Documents/projects/graphql/graphenee/venv/.
После этого вы добавили несколько пакетов с помощью poetry. Однако по умолчанию poetry будет искать только каталог .venv (обратите внимание на начальную точку) в каталоге проекта. Поскольку poetry не нашла .venv, она создала новый виртуальный env в /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9 и установила туда пакеты, которые вы добавили через poetry add.
Проблема в том, что вы пытаетесь использовать "пустой" virtual env в директории проекта вместо созданного poetry. К счастью, с помощью poetry очень легко запустить команду, даже не активируя venv, просто используйте poetry run в директории проекта.
Чтобы проверить установку Django:
poetry run python
# Executes: /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9/bin/python
>>> import django
Для запуска команд управления Django:
poetry run ./manage.py startapp users apps/users
В нем будет использоваться виртуальный env в /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9. Вы можете удалить venv в директории проекта.
Примечание: если вы хотите использовать виртуальный env в директории проекта, то удалите /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9, затем создайте его в директории проекта по
python -m venv .venv`
После этого установите пакеты с поэзией:
poetry install
Теперь поэзия будет использовать локальный виртуальный env в /home/tesla/Documents/projects/graphql/graphenee/.venv при выполнении команды через poetry run [cmd].
У меня также была эта проблема, когда имя моего проекта было django. Имя виртуального env поэзии тогда тоже было django, и когда я запускал poetry add django, ничего не происходило. Когда я переименовал проект, проблема была решена.