Подтвердить что ты не робот

Как "установить пакет" пакет с зависимостями, отличными от Python?

Многие пакеты 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 имеет зависимость от пакета Python bar.
    • Если 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?

4b9b3361

Ответ 1

Это на самом деле комментарий об ответе, предлагающий использовать apt-get, но у меня недостаточно очков репутации, чтобы оставить его.

Если вы используете virtualenv, то установка пакетов python через apt-get может стать болью, так как вы можете получить таинственные ошибки, когда python пакеты, установленные в системе, и пакеты python, установленные в вашем виртуальном компьютере, пытаются взаимодействовать друг с другом. Одна вещь, которую я нашел, что помогает, - использовать функцию build-dep. Чтобы построить зависимости matplotlib, например:

sudo apt-get build-dep python-matplotlib

А затем активируйте свою виртуальную среду и сделайте pip install matplotlib. Он по-прежнему будет проходить процесс сборки, но многие из зависимостей будут заботиться о вас.

Это то, что предлагают cran repositories при установке пакетов R в ubuntu.

Ответ 2

Для большинства популярных пакетов существует временное решение для последних систем ubuntu. Например, я хочу установить matplotlib. Когда вы заказываете pip install matplotlib, он обычно терпит неудачу из-за отсутствующей зависимости.

Вместо этого вы можете использовать apt-get install python-matplotlib. Для python3 вы можете использовать apt-get install python3-matplotlib