2013-07-12 150 views
3

好吧,我有一箇舊的Debian虛擬機。軟件包管理員沒用。不,我不打算更新操作系統。Python安裝,找不到bz2模塊

我的系統上正確安裝了bzip2庫和開發包(實際上來自包)。

我從系統上絕對沒有使用Python開始。我手動刪除了一切。我下載了Python 2.7.5源代碼,並配置了./configure --prefix=/usr。它配置很好。我跑make,它編譯得很好。我嘗試./python -c "import bz2; print bz2.__doc__",它的工作原理,並說:

The python bz2 module provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one shot (de)compression functions, and types for sequential (de)compression.

我然後運行make test和整個測試套件的進行罰款,特別是「test_bz2」測試通過。

然後我運行make install,它將我的新Python二進制文件安裝到我想要的/ usr/bin /中。

我嘗試/usr/bin/python -c "import bz2; print bz2.__doc__",它失敗:

Traceback (most recent call last): File "", line 1, in ImportError: No module named bz2

我已經嘗試了一堆不同的東西,包括建築Python作爲--enable-shared不,沒有運氣。我已經嘗試了至少10次(每次完全清理所有內容,運行make distclean等)。沒有運氣。

我試過了:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH。仍然沒有運氣。但是,如果我刪除了爲/ usr/bin/python創建的符號鏈接make install,而代之以:ln -s /path/to/my/python/compile/python python,現在它神奇地工作。

那麼,到底什麼?爲什麼創建的Python二進制文件只能在編譯目錄中存在二進制文件時才能找到內容,而不是當它放入正常的生產安裝位置?我錯過了什麼?

我在整個過程中從configuremakemake install嘗試測試Python導入調用。

我都從頭重新開始(這次--enable-shared BTW編譯),並驗證不僅在編譯目錄有build/lib.linux-x86_64-2.7/bz2.so,但一旦我運行make install,該文件被放入/usr/lib/python2.7/lib-dynload/bz2.so

我試着在lib-dynload上做一些閱讀,但一直未能確定是否還有其他的Python程序(比如CLI的默認配置或其他)需要能夠告訴它從lib-dynload中取出模塊導入,或者是否有其他位置或選項告訴make install它應該將它放在哪裏而不是dynload。

直到現在我還沒有解釋爲什麼/path/to/compilation/python二進制可以查找和加載bz2.so罰款,但/usr/bin/python二進制無法找到(或負載)/usr/lib/python2.7/lib-dynload/bz2.so

我想也許這是因爲安裝不像/usr/lib/python符號鏈接指向/usr/lib/python2.7目錄這樣的事實。但是我創建了符號鏈接,但仍然沒有去。

我依然迷失在這裏。

+0

你需要做root * make install *。你檢查過嗎? – z8po

+0

我在整個過程中都是root,從'configure'到'make'到'make install'嘗試測試python import調用。 –

+0

確實debian有lib64以及lib嗎?有時候事情會被放在錯誤的地方,你需要符號鏈接...(儘管tbh聽起來不像是發生了什麼,對不起)。 –

回答

2

看來,某種無回答的答案是偶然通過一串長長的Twitter對話而得到的。

我提起這裏的另一個堆棧溢出 問題要問,爲什麼我們所發現的是解決這個問題:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config

爲子孫後代着想,現在的解決方案是,我必須設置PYTHONHOME環境變量到/usr,一切開始工作。令人費解的部分是文檔說PYTHONHOME應該默認爲{prefix},在配置爲/usr期間,我明確將其設置爲默認值。那麼爲什麼我需要手動設置呢?

運行python-config --prefix顯示,{}前綴默認其實/usr/bin,NOT /usr就像我指定的,這導致我需要覆蓋默認返回到默認,怪異。

+0

呵呵。感謝更新。我的同情心...... –