2015-09-25 95 views
0

我從源代碼構建python(版本3.5)以獲取最新版本。我可以make Python和安裝它,但幾個 「可選」 的模塊,包括_sqlite3不安裝:python從源代碼構建:無法構建可選模塊sqlite3

$>./configure --prefix=/my/prefix && make 

產生如下:

...

Python構建成功完成!

必要的位來構建這些可選模塊均未發現:

_bz2 _lzma _sqlite3

_ssl _tkinter的readline

要找到所需的位,看在setup.py在detect_modules()爲該模塊的名稱。

我(frustratedly)從源代碼也安裝sqlite3的,以確保地方存在sqlite3的開發文件,我相信我已經設置了必要的libinclude路徑按相關lzma module install tutorial

$> find/-name libsqlite3.so 
/home/username/myproject/lib/libsqlite3.so 

$> find/-name sqlite3.h 
/home/username/myproject/include/sqlite3.h 

$> echo $LD_LIBRARY_PATH 
/home/username/myproject/lib 

$> echo $LDFLAGS 
-L/home/username/myproject/lib 

$> echo $CFLAGS 
-I/home/username/myproject/include 

然而,當我運行./configure --prefix=/my/prefix --enable-loadable-sqlite-extensions && make時,我得到上面的錯誤,_sqlite3(其中包括)沒有安裝,因爲找不到必要的位。

根據this related answer,看來我可能需要更改setup.py?那是對的嗎?

難道真的沒有比剽竊python setup.py腳本更好的方法嗎?

順便說一句,我認識到,與yum安裝sqlite-dev可以解決這個問題,並把相關的sqlite3文件到Python安裝的地方很明顯,但我不肯定,我將能夠做到這一點,由於是,由於限制資源庫訪問。

回答

2

setup.py腳本不檢查任何環境變量來sqlite3.h文件或任何其他相關文件的位置,並因此改變環境變量的不足,讓蟒蛇找到文件,除非sqlite3-dev軟件包都安裝了「標準「目錄。

的可能include目錄爲sqlite3的下面的代碼片斷是從setup.py取(對於Python-3.5.0):

sqlite_inc_paths = ['/usr/include', 
        '/usr/include/sqlite', 
        '/usr/include/sqlite3', 
        '/usr/local/include', 
        '/usr/local/include/sqlite', 
        '/usr/local/include/sqlite3', 
        ] 

從這一點,其清楚,如果sqlite3的沒有被安裝在一個「標準」系統位置,例如/ usr或/ usr/local,那麼頭文件將不會被找到。

爲了解決這個問題,加入/path/to/my/personal/sqlite/include到上述sqlite_inc_paths陣列:

sqlite_inc_paths = ['/path/to/my/personal/sqlite/include', 
        ...]       

和SQLite模塊會被發現。

自動安裝。爲了自動操作的變化,一個Perl一個襯墊可以用來作出上述變化:

$> perl -pi.orig -e "s|(?<=sqlite_inc_paths =)\[|['/path/to/my/personal/sqlite/include',\n|" setup.py 

sed也可以使用,但-i就地標誌不能在所有系統上運行。

2

此鏈接爲我構建Python 3.5提供瞭解決方案。特別針對Ubuntu,但也幫助瞭解了CentOS6。

Install missing packages before compiling Python3

更具體的Ubuntu服務器16.04:

 

for pkg in build-essential zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-devliblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev 
do 
    apt-get -y install $pkg 
done 
+0

我想'TK-dev'應該工作一樣'tk8.5-dev',但可以適用於更廣泛的案例。例如,在MXLinux 17上,可用的tk版本是8.6,並且安裝'tk-dev'似乎爲我工作。 – bli