2017-01-09 237 views
1

我想在openSUSE 42.2上從源代碼安裝新的Python(3.6,幾周後發佈)。一切蟒蛇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/LIB-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'沒有解決任何(對於Python-3.6.4,在'openSUSE的42.2') 。實際上,沒有一個'python3.6/lib-dynload /'模塊是可導入的。 – ederag

0

opensuse devel:languages:python:Factorypython3 package有補丁。 規範文件通常是一個很好的起點。

注意:install步驟將在/usr/local/bin中安裝python3。將其更改爲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*