2017-01-09 2 views
1

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

./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/Библиотека-dynload/readline.cpython-36m-x86_64-linux-gnu.so. Только интерпретатор там не смотрит (он полностью игнорирует lib64, я проверил с -vv).

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

Это, как представляется, известная проблема, см. the Python bugtracker. Это довольно длинный обмен, заканчивающийся

Is there agreement on what needs doing here? I'd like to see this into 3.5 before it reaches its 10th birthday :)

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

И, очевидно, любое исправление было бы очень желанным.

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

ответ

0

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

+0

'--enable_shared' не был признан, и' --enable-shared' ничего не исправить (для питона-3.6.4, на 'OpenSUSE 42.2') , На самом деле ни один из модулей 'python3.6/lib-dynload /' не был импортирован. – ederag

0

opensuse devel:languages:python:Factorypython3 package имеет исправления для этого. Файлы параметров обычно являются хорошей отправной точкой.

Примечание: шаг install установит python3 в /usr/local/bin. Изменение этого значения на altinstall позволяет избежать затенения общесистемного python3.

Установите

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

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 

Uninstall

Для того, чтобы избавиться от установленных файлов:

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* 
Смежные вопросы