2012-09-23 65 views
6

我希望從源代碼編譯Python 2.7.3。操作系統是OpenSUSE 11.4 x86_64,它已經提供了Python 2.7。我想使用2.7.3來獲得最新的安全補丁,但它是一個共享系統,所以我無法修補系統Python解釋器。已經在Python 2.7系統上從源代碼編譯Python 2.7.3

我編譯使用./configure --prefix=/opt/python --enable-shared。沒有配置錯誤,所以我make。再次沒有錯誤。我做了一個make install(我不認爲我需要make altinstall,因爲這個安裝前綴在/opt/python尚未使用)。

當我嘗試運行新的二進制文件/opt/python/bin/python時,Python宣佈它的版本爲2.7,而不是2.7.3。我發現要解決這個問題的唯一方法是移動系統的/usr/lib64/libpython2.7.so.1.0,並將其符號鏈接到/opt/python/lib/python/libpython2.7.so.1.0。這工作和Python宣佈它是2.7.3,但是這打破了系統Python。

無論如何,我可以讓兩者共存,例如通過使/opt/python使用它自己的libpython?除了在運行時提供LD_LIBRARY_PATH之外。有沒有編譯時間的解決方案?謝謝。

+0

看爲虛擬ENV – Tim

+0

你需要' - -enable-shared'?我在各種發行版上構建了一個自定義Python數十億次(沒有'--enable-shared'),然後使用這個Python所需的唯一東西就是修改'PATH'。 –

+0

請注意,如果您不使用「--enable-shared」構建Python,則會得到一個包含整個共享庫的巨大可執行文件。嵌入需要共享庫,這就是Linux發行版使用「--enable-shared」構建的原因。 – user4815162342

回答

15

爲了避免指定每個Python的啓動時使用LD_LIBRARY_PATH的運行時庫路徑,你可以在編譯的時候指定它使用-rpath鏈接器選項:

./configure --enable-shared --prefix=/opt/python \ 
      LDFLAGS=-Wl,-rpath=/opt/python/lib 
+1

完美 - 非常感謝! –