Правильная сборка локального python3 с поддержкой bz2

Я пытаюсь создать локальную версию python3 (в частности, python3.7, но та же проблема с 3.6.6), но у меня возникают проблемы со связью с некоторыми библиотеками C и/или заголовками (по крайней мере, это то, что я думаю, проблема является).

Я могу собрать python3.7, но столкнулся с проблемами с bzip2 (но я подозреваю, что будут другие системные библиотеки, о которых я не знаю). Это проявляется при попытке импорта различных пакетов/модулей, которые требуют этого, как ошибка импорта:

ModuleNotFoundError: No module named '_bz2'

Из этого вопроса о стеке — Задать вопрос — кажется, что я построил python без правильных заголовков bz2 . Сама сборка Python не дает сбоев.

Конкретный вопрос заключается в том, как создать локальную версию Python с помощью bz2? В более общем плане вопрос заключается в том, как правильно связать системные библиотеки? (поскольку могут быть и другие, с которыми я не сталкивался с ошибками)

С точки зрения того, что я пробовал, я нашел этот (старый) вопрос - Как вы назначаете bz2 альтернативной установке python? и этот более свежий вопрос Компиляция поддержки bz2 в python2 и попробовал несколько вещей на их основе.

Первая проблема, с которой я столкнулся, - это поиск нужных библиотек и т. д. для ссылки (решение в приведенном выше вопросе предлагает установить CFLAGS="-I/path/to/bz2/include" и LDFLAGS="-L/path/to/bz2/lib"). Предположительно, они где-то в моей системе (ubuntu 16.04), поскольку системные установки python2.7 и python3.5 не имеют проблем с bzip2.

Я нашел libbz2.so.1 (и некоторые другие) /lib/x86_64-linux-gnu/, но папки, похоже, не соответствовали шаблону примера/ответа выше. Таким образом, я создал новую локальную версию bz2 (в .bzp в моей локальной папке), а затем попытался связать ее, когда пытался собрать python3.7, используя следующее:

./configure --prefix=/home/user/.localpython CFLAGS="-I/home/user/.bz2/include" LDFLAGS="-L/home/user/.bz2/lib"

Я также попробовал более общую конфигурацию (которая была основана на Скомпилируйте Python с поддержкой bz2, ссылка на которую приведена во второй статье выше.)

./configure --prefix=/home/user/.python CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"

(оба не увенчались успехом)

Любые указатели, советы и т. д. очень ценятся - заранее спасибо!


person djmac    schedule 03.07.2018    source источник
comment
Было бы здорово увидеть фактический результат неудачных команд. Это может помочь сузить проблему.   -  person sophros    schedule 03.07.2018
comment
На самом деле сборка не дает сбоя - она ​​просто не собирается с поддержкой bz2 (что проявляется, если вы пытаетесь импортировать различные модули, которые ее используют). Вопрос будет отредактирован.   -  person djmac    schedule 03.07.2018


Ответы (1)


Ubuntu по умолчанию не устанавливает файлы, необходимые для включения поддержки bz2 (или поддержки любой другой подобной библиотеки) при компиляции Python. Вам нужно добавить пакет заголовков разработки для библиотеки.

Для поддержки bz2 в Ubuntu это libbz2-dev пакет. Вам нужно будет установить больше таких пакетов для других функций.

Пакет помещает заголовки в стандартное место, известное скрипту Python configure. Вам не нужны дополнительные флаги.

Экстраполируя зависимости сборки Python 3.6 от Ubuntu 17.10, вы также хотели бы:

libbluetooth-dev
libbz2-dev
libdb-dev
libexpat1-dev
libffi-dev
libgdbm-dev
liblzma-dev
libmpdec-dev
libncursesw5-dev
libreadline-dev
libsqlite3-dev
libssl-dev
zlib1g-dev

и если вы хотите поддерживать библиотеку Tk GUI, tk-dev и blt-dev.

person Martijn Pieters    schedule 07.07.2018
comment
Спасибо - это решило первоначальную проблему (... и, возможно, будущие проблемы). Я не думаю, что вы можете пролить свет на то, почему bz2 работает при установке системы (т.е. import bz2 отлично работает в системе python3? - person djmac; 08.07.2018
comment
@djmac: потому что системный Python был скомпилирован с этими присутствующими заголовками. - person Martijn Pieters; 08.07.2018