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
Ресурс: