Установка 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
Вариант проблема как-то уходит. Достаточно хорошо для меня.