python 3.6安装和lib64

时间:2017-01-09 23:11:11

标签: python installation 32bit-64bit python-3.6

我正在尝试在openSUSE 42.2上从源代码安装新的Python(3.6,仅在几周前发布)。一切

./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下的模块。

这似乎是一个已知问题,请参阅the Python bugtracker。这是一个相当冗长的交换,以

结尾
  

是否就此需要做什么达成一致?我希望在它到达10岁生日之前将它看到3.5:)

这让我有点困惑。这应该被解决吗? 我不记得曾经遇到过这个问题,所以我想知道它是否是3.6回归。

显然,任何修复都是最受欢迎的。

更新:暂时我可以解决这个问题,将lib64下的所有东西都嵌入到lib中。显然,这不是一个理想的解决方案;至少它首先破坏了引入lib64(能够并排使用32位和64位版本)的目的。 我更喜欢配置文件中的内容。

2 个答案:

答案 0 :(得分:1)

opensuse devel:languages:python:Factory python3 package有补丁。 规范文件通常是一个很好的起点。

注意:install步骤会在python3中安装/usr/local/bin。将其更改为altinstall可避免影响系统范围python3

安装

创建一个downloads变量,指向将保存所有下载文件(python sourcefactory 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

卸载

删除已安装的文件:

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*

对于python3.7

tar --no-same-owner -xvf $downloads/Python-3.7.3.tar.xz
cd Python-3.7.3
patch -p1 < $downloads/python-3.7.3-python-3.6.0-multilib.patch
patch -p1 < $downloads/python-3.7.3-distutils-reproducible-compile.patch
patch -p0 < $downloads/python-3.7.3-python-3.3.0b1-localpath.patch
patch -p0 < $downloads/python-3.7.3-00251-change-user-install-location.patch

# do not forget !
autoreconf -i

mkdir build; cd $_
../configure --enable-optimizations --enable-ipv6 --enable-shared --with-system-ffi --with-system-expat --enable-loadable-sqlite-extensions

make -j $(nproc)

sudo make altinstall

答案 1 :(得分:0)

好的,我找到了一个解决方案:如果使用--enable_shared选项进行配置,问题就会消失。对我来说足够好了。