2011-09-14 71 views
16

因爲我必須在通過kickstart過程構建的多個Oracle Linux服務器上安裝多個版本的Python,我想爲我們的yum存儲庫構建一個python rpm。我能夠使用'make altinstall'手動構建Python,它不會在您的默認系統Python安裝上安裝,所以我認爲這將是一條路。我建立的Python RPM不會安裝

大量的試驗和錯誤後,我設法建立開始與操作.bz2蟒蛇2.7包一個rpm - 但現在,當我嘗試安裝它,我得到一個錯誤:

error: Failed dependencies: 
    /usr/local/bin/python is needed by Python-2.7.2-1.i386 

什麼.. ??? Python是我想要安裝的!而系統默認的Python(2.4)在/ usr/bin/python中!我的python目錄的原型位置是/tmp/python2.7(可執行文件是/tmp/python2.7/bin/python2.7)。那麼爲什麼它在/ usr/local/bin中查找?

這裏是我的RPM SPEC的核心:

%prep 
%setup -q 

%build 
./configure --prefix=/tmp/python2.7 
make 

%install 

make altinstall 

我走在轉生成日誌定睛一看,我看到:

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...] 

好了,還有的地方在/ usr /本地/斌進來...現在,問題是,它是如何確定這些要求?我說錯了嗎?我是否需要重寫某些內容?

與許多rpm新手一樣,我獲得了構建部分,但是我並沒有真正地「琢磨」rpmbuild結束時會發生什麼以及實際上將哪些內容放入rpm文件(除了在%文件中指定的文件之外),然後在執行rpm安裝時會發生什麼。

任何人都可以提出爲什麼我的安裝失敗,或者我可能會讀懂,以瞭解爲什麼我的rpm版本需要我想要構建?

回答

18

您應該能夠通過添加以下行到你的spec文件來解決這個問題:

AutoReq: no 

這裏是我的原因,這是必要的瞭解。當rpmbuild使用#!運行.py文件時(shebang)會自動添加shebang指定的二進制文件。不僅如此,如果shebang是#!/usr/bin/env python,它將爲解決任何問題添加依賴關係(在$PATH上的第一個python)。

您可能需要關閉自動需求處理或查找所有會導致問題並將其更改爲其他內容的shebang。

+0

聽起來很有希望 - 我會試試看... – Ilane

+0

>>>打印「謝謝你,F.J !!!」 謝謝F.J !!! – Ilane

+1

在這種情況下,您不想關閉依賴關係處理。這可能會破壞python包,因爲RPM不知道包依賴於什麼文件。正確的做法是修補包含錯誤的shebang行的文件。 – jayhendren

6

rpmbuild可以變得非常聰明,這是其中的一種情況。它可能含有一些你的腳本文件中的一個拉到/usr/local/bin/python

#!/usr/local/bin/python 

在頂部。在你的bz2文件中的文件中嘗試grep'ing這個路徑。

+0

有兩個 - 但是,如果我不必因爲%setup將它們從原始下載文件中解壓出來而無法使用源代碼 - 有沒有解決此問題的方法? – Ilane

+1

這是正確的答案。在python源代碼中,有一個包含'/ usr/local/bin/python'的shebang文件。 @Ilane,正確的做法是給源代碼寫一個補丁。構建RPM的標準部分是編寫補丁。你會在包含違規的shebang的文件中注意到,如果python包沒有安裝python到'/ usr/local',那麼python包需要編寫補丁。 – jayhendren

+1

特別是問題是'cgi.py'。 Fedora規範([python 3](http://pkgs.fedoraproject.org/cgit/python3.git/tree/python3.spec),[python 2](http://pkgs.fedoraproject.org/cgit/python .git/tree/python.spec))通過運行'Tools/scripts/pathfix.py'來解決這個問題。 –