Компиляция GEOS 3.6.2 с модулем Python в Linux

Попытка установить GEOS-3.6.2 в системе Linux с уже скомпилированным Python 3.6.4. Я пытаюсь сделать пакет с помощью команды:

export PYTHON=/usr/local/bin/python3 && make && sudo make install

Команда configure завершается с ошибкой:

...much snipped...
checking for swig... /usr/bin/swig
checking for SWIG version... 3.0.8
configure: SWIG executable is '/usr/bin/swig'
configure: SWIG library directory is '/usr/share/swig3.0'
checking for python version... 3.6
checking for python platform... linux
checking for python script directory... ${prefix}/lib/python3.6/site-packages
checking for python extension module directory... ${exec_prefix}/lib/python3.6/site-packages
checking for Python include path... /usr/local/include/python3.6m
checking for Python library path... 
configure: error: cannot find Python library path

Я подтвердил, что библиотека Python существует в /usr/local/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.a`

Я скомпилировал Python с помощью простого ./configure --prefix=/usr/local && make && sudo make install

Системный материал:

~/Downloads/geos-3.6.2$ uname -a
Linux Sleipnir 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
~/Downloads/geos-3.6.2$ which python3
/usr/local/bin/python3
~/Downloads/geos-3.6.2$ python3 -V
Python 3.6.4
~$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

person Brian    schedule 29.03.2018    source источник
comment
Пожалуйста, отредактируйте свой вопрос, указав название и версию ОС. ... Отсутствующий libpython: типичный пример — /usr/lib(64)/{ libpython3.so -> libpython3.6m.so.1.0 }. ... Вы забыли настроить Python3 с помощью --enable-shared ?   -  person Knud Larsen    schedule 29.03.2018
comment
Насколько я понимаю, вся информация, которую вы просили, уже есть? Можете быть более конкретными? Что касается enable-shared, то я этого не делал, но в предыдущих версиях python/geos в этом не было необходимости. Я попробую это и посмотрю, исправит ли это что-нибудь.   -  person Brian    schedule 29.03.2018
comment
Ваш libpython3.6m.a не находится в системе LD_LIBRARY_PATH. /usr/lib(64) is: мой намек в предыдущем комментарии. /usr/local/lib/ чаще всего также включается в LD_LIBRARY_PATH. ... /usr/local/lib/python3.6/config-3.6m-x86_64-linux-gnu/ нет. .... В вашем вопросе не найдено имя/версия ОС: cat /etc/*release*   -  person Knud Larsen    schedule 30.03.2018
comment
Плохо: `$ cat /etc/*release* DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION=Ubuntu 16.04.4 LTS NAME=Ubuntu VERSION=16.04.4 LTS (Xenial Xerus) ID=ubuntu ID_LIKE=debian PRETTY_NAME=Ubuntu 16.04.4 LTS VERSION_ID=16.04 HOME_URL=ubuntu.com SUPPORT_URL=help.ubuntu.com BUG_REPORT_URL=bugs.launchpad.net/ubuntu VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial` Кроме того, спасибо за добавленную информацию, она дала мне лучшее понимание того, что она искала.   -  person Brian    schedule 30.03.2018
comment
Пожалуйста, не добавляйте в заголовок такие вещи, как «решено». Если вам удалось найти собственное решение, опубликуйте ответ (что вы и сделали, отлично), а по истечении времени ожидания примите свой ответ.   -  person Mark Rotteveel    schedule 30.03.2018


Ответы (1)


Благодаря комментариям Кнуда выше удалось правильно скомпилировать GEOS. Python теперь настроен с ./configure --prefix=/usr/local --enable-shared, а затем с sudo ldconfig -v /usr/local/lib

После этих действий GEOS отлично скомпилировался с export PYTHON=/usr/local/bin/python3 && ./configure --prefix=/usr/local --enable-python && make && sudo make install

ОБНОВЛЕНИЕ: при попытке собрать GEOS в другой системе я снова столкнулся с этой проблемой. На этот раз решение было немного другим. Компиляция Python создает библиотеку и с именем файла libpython3.6m.so.1.0. Конфигурация GEOS ищет паттерн libpython$PYTHON_VERSION.*. Если версия python определена как 3.6, которую возвращала эта система, сборка завершится ошибкой из-за этого добавленного «m».

Дополнительное ИСПРАВЛЕНИЕ состояло в том, чтобы добавить символическую ссылку как ln -s libpython3.6m.1.0 libpython3.6.so в каталог библиотеки.

person Brian    schedule 30.03.2018