поэзия не может найти версию зависимости, даже если она существует
При повышении моей версии python с 3.7 до 3.8 в поэзии переустановка всех зависимостей завершается ошибкой с версией следующего:
ERROR: No matching distribution found for...
Дистрибутив для этой версии доступен на pypa и часто является самой последней версией.
Простое удаление ошибочного пакета не решит проблему, поскольку поэзия, скорее всего, не удастся с другими пакетами. После некоторого расследования выяснилось, что поэзия почему-то не использует pip3 для установки снизу, а вместо этого использует pip2.7.
Действительно, это поддерживается предупреждением об устаревании, и ошибка всегда воспроизводима, если я пытаюсь установить ту же версию с помощью pip (глобально или иначе), а не pip3.
Эта проблема расстраивает, и удаление одного только Venv, похоже, не помогает. Как я могу решить эту проблему зависимости, которой не должно быть вообще?
2 ответа
Здесь есть две взаимосвязанные проблемы. 1. Поэзия, кажется, постоянно проваливает обновление venv, когда вы изменяете версии python. По словам finswimmer, обновление должно создать новый виртуальный env для новой версии Python, однако этот процесс может завершиться неудачно, если поэзия использует неправильнуюpip
version или теряет информацию о том, какую виртуальную среду он использует. 2. поэзия использует все, что угодноpip
не задается никаких вопросов - без возможности переопределить и принудительно использовать pip3.
Вот несколько шагов, которые я использовал для решения этой проблемы.
- удалить виртуальный env (иногда поэзия теряет след venv / думает, что он уже активирован. Лучше очистить доску)
rm -rf `poetry env list --full-path`
- создать новый виртуальный env (команда должна завершиться ошибкой, но venv будет создан)
poetry install
- вручную активировать виртуальную среду
source "$( poetry env list --full-path )/bin/activate"
- установка поэзии в виртуальном окружении (это гарантирует, что поэзия использует правильную версию pip)
poetry install
Иногда,
import <NAME>
не то же самое, что
pip install <NAME>
/
poetry add <NAME>
.
Пример:
import icd10
Установить / Поэзия:
pip install icd10-cm
poetry add icd10-cm
По соглашению имя импорта совпадает с именем установки, что не всегда так.
Это потому что
install
имена должны быть уникальными, но импортируемые имена не обязательно должны быть такими, поскольку мы можем добавить псевдоним:
import icd10 as foo