好吧,我有一箇舊的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二進制文件只能在編譯目錄中存在二進制文件時才能找到內容,而不是當它放入正常的生產安裝位置?我錯過了什麼?
我在整個過程中從configure
到make
到make 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
目錄這樣的事實。但是我創建了符號鏈接,但仍然沒有去。
我依然迷失在這裏。
你需要做root * make install *。你檢查過嗎? – z8po
我在整個過程中都是root,從'configure'到'make'到'make install'嘗試測試python import調用。 –
確實debian有lib64以及lib嗎?有時候事情會被放在錯誤的地方,你需要符號鏈接...(儘管tbh聽起來不像是發生了什麼,對不起)。 –