Установка Python 3.6 и lib64

Я пытаюсь установить новый Python (3.6, выпущенный всего несколько недель назад) из исходного кода на openSUSE 42.2. Все

./configure --prefix /home/paul/2017 --enable-optimizations
make
make install

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

Python 3.6.0 (default, Jan  9 2017, 22:01:27)                                                                                                                                     
[GCC 4.8.5] on linux                                                                                                                                                              
Type "help", "copyright", "credits" or "license" for more information.                                                                                                            
Traceback (most recent call last):
  File "/home/paul/.pythonrc", line 7, in <module>
    import readline
ModuleNotFoundError: No module named 'readline'

Теперь этот модуль есть, он установлен в $PREFIX/lib64/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so. Только интерпретатор там не ищет (он полностью игнорирует lib64, я проверял с помощью -vv).

Обновление: для ясности, это влияет не только на readline, но и на все под lib64, особенно на модули под lib-dynload.

Кажется, это известная проблема, см. Багтрекер Python. Это довольно длительный обмен, заканчивающийся

Есть ли соглашение о том, что нужно делать здесь? Я хотел бы увидеть это в 3,5, прежде чем он достигнет своего 10-летия:)

Это оставляет меня немного смущенным. Это должно быть решено? Я не помню, чтобы когда-либо сталкивался с этой проблемой раньше, поэтому мне интересно, если это регрессия 3,6.

И, очевидно, любое исправление будет приветствоваться.

Обновление: в настоящее время я могу обойти эту проблему, вставив все ссылки из lib64 в lib. Очевидно, что это не идеальное решение; по крайней мере, это побеждает цель введения lib64 (возможность иметь 32- и 64-битные версии бок о бок) в первую очередь. Я бы предпочел что-то в конфигурационном файле.

2 ответа

Решение

opensuse devel:languages:python:Factory Пакет python3 имеет патчи для этого. Spec-файлы обычно являются хорошей отправной точкой.

Обратите внимание install шаг будет установить python3 в /usr/local/bin, Меняя это на altinstall избегает затенения всей системы python3,

устанавливать

Создать downloads переменная, указывающая на каталог, в который будут сохранены все загруженные файлы ( исходный код Python и заводские исправления)

export downloads=/usr/local/build/downloads

В каталоге, доступном для записи пользователем:

tar --no-same-owner -xvf $downloads/Python-3.6.4.tar.xz
cd Python-3.6.4

patch -p1 < $downloads/python-3.6.0-multilib-new.patch
patch -p0  < $downloads/python-3.3.0b1-localpath.patch
patch -p0 < $downloads/python-3.3.0b1-curses-panel.patch

# mind this step, otherwise
# none of the modules in `lib-dynload` could be imported !
autoreconf -i

mkdir build; cd $_
../configure --enable-optimizations --enable-ipv6 \
             --with-fpectl --enable-shared --with-system-ffi \
             --with-system-expat --enable-loadable-sqlite-extensions
make -j $(nproc)
# altinstall, not install (see above)
sudo make altinstall

Удалить

Чтобы избавиться от установленных файлов:

sudo rm -rf /usr/local/lib64/python3.6/
sudo rm -f /usr/local/lib64/libpython3.6m*
sudo rm -f /usr/local/lib64/libpython3.so
sudo rm -f /usr/local/lib64/pkgconfig/python-3.6*
sudo rm -f /usr/local/bin/python-3.6*

Хорошо, я нашел решение: если кто-то настраивает с --enable_shared Вариант проблема как-то уходит. Достаточно хорошо для меня.

Другие вопросы по тегам