Как заставить pip-пакеты с управлением исходным кодом соответствовать требованиям других пакетов
Когда пакет установлен из хранилища, pip freeze
дает путь к хранилищу для этого пакета, а не имя / версию пакета. Пример:
-e git+https://github.com/ryneeverett/Python-Markdown.git@11f0b010395a86eac93db0816bcf984639b839e9#egg=Markdown-master
Когда такой пакет требуется другим приложением, он, кажется, не распознается. Пример:
$ hyde gen
Traceback (most recent call last):
File "/home/ryne/.virtualenvs/DEV/bin/hyde", line 5, in <module>
from pkg_resources import load_entry_point
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2675, in <module>
def extras(self):
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 552, in resolve
if item not in self.entry_keys:
pkg_resources.DistributionNotFound: Markdown==2.3.1
Как следует избегать таких проблем?
1 ответ
Я не могу подтвердить, решило ли это мою древнюю проблему, но (просмотрев исходный код pip), я почти уверен в том, в чем проблема:
Я устанавливал из git, потому что я хотел последнюю версию разработки плюс мои модификации. Hyde (редко поддерживаемый сторонний пакет) прикрепил версию уценки, которая почти наверняка была на несколько выпусков позади. Таким образом, проблема была в том, что версия уценки, указанная в setup.py моего форка, на самом деле не была 2.3.1.
Процитирую свой ответ на другой вопрос:
Pip решает, удовлетворяется ли требование исключительно на основе номера версии (в setup.py).