Многие пакеты python имеют зависимости сборки от пакетов, отличных от Python. Я специально думаю о lxml и cffi, но эта дилемма применяется к множеству пакетов на PyPI. Оба этих пакета имеют ненастроенные зависимости сборки для пакетов, отличных от Python, таких как libxml2-dev, libxslt-dev, zlib1g-dev и libffi-dev. Веб-сайты для lxml и cffi объявляют некоторые из этих зависимостей, но, похоже, нет способа сделать это из командной строки.
В результате есть сотни вопросов о SO, которые принимают этот общий вид:
pip install foo
с ошибкой: "фатальная ошибка: bar.h: нет такого файла или каталога". Как это исправить?
Является ли это неправильным использованием pip
или это как он должен работать? Есть ли разумный способ узнать, какие зависимости для сборки устанавливать до запуска pip
? Мой текущий подход:
- Я хочу установить пакет под названием
foo
. -
pip install foo
-
foo
имеет зависимость от пакета Pythonbar
.- Если
bar
build завершается с ошибкой, посмотрите на сообщение об ошибке и предположите /google, какую зависимость, отличную от Python, мне нужно установить. -
sudo apt-get install libbaz-dev
-
sudo pip install bar
- Повторяйте до тех пор, пока
bar
не удастся выполнить.
- Если
-
sudo pip uninstall foo
- Повторите весь процесс до появления сообщений об ошибках.
Шаг №4 особенно раздражает. По-видимому pip
(версия 1.5.4) сначала устанавливает запрошенный пакет перед любыми зависимостями. Поэтому, если какие-либо зависимости не удались, вы не можете просто попросить pip
установить его снова, потому что он считает, что он уже установлен. Также нет возможности устанавливать только зависимости, поэтому вы должны удалить пакет и затем переустановить его.
Есть ли еще более интеллектуальный процесс для использования pip
?