Django не может найти новые модули, используя pyenv и virtualenv

Я уверен, что для опытного человека это довольно просто. Я изучаю Django по электронной книге Wedge of Django.

Я использую Python 3.8.7, установленный через pyenv следующим образом: pyenv install 3.8.7

Затем я установил virtualenv следующим образом: pyenv virtualenv 3.8.7 everycheese

Я активирую virtualenv в своем репозитории следующим образом: pyenv local everycheese

Среда отображается как активная в подсказке, поскольку начинается с (everycheese).

Основной проект клонирован из Django Cookiecutter https://github.com/cookiecutter/cookiecutter-django

Затем я использовал pip для установки требований из файлов requirements.txt.

Однако у меня возникают проблемы, когда я пытаюсь добавить новые пакеты (путем добавления пакета в requirements.txt в виде новой строки и повторной установки с помощью pip).

pip list, или pip freeze оба показывают новый модуль. Но когда я добавляю модуль в INSTALLED_APPS и пытаюсь импортировать его в файл models.py, Django не может найти его.

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

При использовании pip (или вообще любого другого скрипта Python) важно убедиться, какой интерпретатор Python используется. Обычно очевидно, какой интерпретатор Python используется при вызове pip. Но иногда это не очевидно, и скрипт на самом деле выполняется с другим интерпретатором, чем можно подумать. Это приводит к неожиданным результатам и большой путанице.

Поэтому всегда лучше явно вызывать именно тот интерпретатор Python, на который вы нацелены, и сказать ему запустить pip'исполняемый модуль (или любой другой исполняемый модуль). Обычно:

$ python -m pip install Something
$ # instead of 'pip install Something'
$ python3 -m pip install Something
$ # instead of 'pip3 install Something'

Если все еще есть сомнения, можно даже пойти на шаг дальше и использовать более явный путь к интерпретатору Python в явном виде:

  • /the/path/to/my/pythonX.Y -m pip
  • path/to/my/pythonX.Y -m pip
  • path/to/my/python -m pip
  • path/to/venv/bin/python -m pip
  • pythonX.Y -m pip
  • python3 -m pip
  • python -m pip

Ресурс:

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