Пип: любой обходной путь, чтобы избежать -- разрешить-внешний?


Последние версии pip установщик не устанавливал пакеты, которые не загружают свои файлы пакетов в PyPI, если пользователь явно не предоставит --allow-external Вариант (связанный ответ ).

Я хочу распространять свой пакет, зависящий от такой библиотеки, как dirspec. В настоящее время я должен сказать пользователям моего пакета установить мой пакет следующей командой:

$ pip install --allow-external dirspec MyPackage

Это становится более проблематичным, когда речь заходит о библиотечной упаковке. Если мой пакет-это библиотека я также должен сказать авторам пакетов, зависящих от моего пакета, чтобы они попросили своих пользователей установить их пакет следующей командой:

$ pip install --allow-external dirspec TheirPackage

Есть ли обходной путь, чтобы избежать этой ситуации?

2 11

2 ответа:

Правильнее всего включить требования в ваш тарбол или в мега-тарбол, содержащий их проекты и ваши. Тогда pip будет счастливо устанавливать из локальных файлов.

Вы просите обходной путь функции безопасности. Установка с внешнего сайта без моего ведома может считаться вредной.

Может быть альтернативное решение: либо полагаться на pip, жалующегося на то, что требуемый пакет недоступен без этого коммутатора, либо пытаться дать такую инструкцию из вашего кода установки. Однако второй подход потерпит неудачу, если вы действительно объявите зависимость от такого пакета, так как pip попытается сначала установить внешний, таким образом не отдавая своего setup.py шанс сказать что-нибудь. Вам придется сделать ваш пакет независимым от него и распечатать из setup.py инструкция по установке некоторого пакета с внешнего сайта. Это звучит еще сложнее.

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

EDIT: тестовая установка с текущей версией pip (1.5.4) показывает,что есть такая подсказка, предлагающая использовать переключатель -- use-external printed.

$ pip install gitlle
Downloading/unpacking gittle
.....
Downloading/unpacking mimer (from gittle)
  Could not find any downloads that satisfy the requirement mimer (from gittle)
  Some externally hosted files were ignored (use --allow-external mimer to allow).
Cleaning up...