12-6-26 解決安裝 Python 2.7.3 無法編譯 SQLite 模組的問題

這幾天 Mowd 為了要寫 Plurk 機器人,就裝了最新的 Python 2.7.3
下載回來自己編譯後發現在編譯 SQLite 時會出現下列問題

Python-2.7.3/Modules/_sqlite/connection.c: In function ‘_pysqlite_set_result’:
Python-2.7.3/Modules/_sqlite/connection.c:552: error: ‘sqlite3_int64’ undeclared (first use in this function)

如果沒有要用到 SQLite 的話其實是無傷大雅的
不過 Mowd 習慣用的 ipython 可就不這麼認為了
如果沒有裝 SQLite Module 的話 ipython 就會直接噴給你看,連開都不能開
後來終於在 python 的 issue tracker 上面找到了相對應的 patch
patch 完就可以正常編譯了

diff –git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 26678c7..a646513 100644
— a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -549,7 +549,7 @@ void _pysqlite_set_result(sqlite3_context* context, PyObject* py_val)
} else if (py_val == Py_None) {
sqlite3_result_null(context);
} else if (PyInt_Check(py_val)) {
– sqlite3_result_int64(context, (sqlite3_int64)PyInt_AsLong(py_val));
+ sqlite3_result_int64(context, (sqlite_int64)PyInt_AsLong(py_val));
} else if (PyLong_Check(py_val)) {
sqlite3_result_int64(context, PyLong_AsLongLong(py_val));
} else if (PyFloat_Check(py_val)) {
@@ -580,7 +580,7 @@ PyObject* _pysqlite_build_py_params(sqlite3_context *context, int argc, sqlite3_
sqlite3_value* cur_value;
PyObject* cur_py_value;
const char* val_str;
– sqlite3_int64 val_int;
+ sqlite_int64 val_int;
Py_ssize_t buflen;
void* raw_buffer;

有人也把這個 patch 放到 github 上面
只要進入 Python-2.7.3 資料夾,執行以下指令就可以了

curl -sk https://raw.github.com/gist/2727063/ | patch -p1

原始連結:http://bugs.python.org/issue14572

在〈12-6-26 解決安裝 Python 2.7.3 無法編譯 SQLite 模組的問題〉中有 5 則留言

  1. Jill

    您好~ 想請問python的那個.patch該如何使用呢 @@"
    在麻煩您不吝指教~~

    回覆
  2. Jill

    hi Mowd

    原來是要在source包裡下這個command XD
    可以用了~ 感謝感謝 ^^

    回覆
  3. Jill

    hi Mowd
    想請問一下您的 Python/2.7.3 是裝在哪種OS底下?
    我裝了兩種版本的OS,RH5能用,RH4卻不能用
    另外~官網上有另一個patch: sqlite3_int64_v2.patch
    這個不曉得是要上到哪一個檔案 @@"
    我用find找到了他patch上的configure.ac,但是行數沒有patch裡寫的2986這麼多行呀 Q口Q

    回覆

發佈回覆給「Jill」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *