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

Вернуться на верх