這幾天 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)
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;
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
您好~ 想請問python的那個.patch該如何使用呢 @@"
在麻煩您不吝指教~~
在終端機執行藍色那行就好了
hi Mowd
原來是要在source包裡下這個command XD
可以用了~ 感謝感謝 ^^
hi Mowd
想請問一下您的 Python/2.7.3 是裝在哪種OS底下?
我裝了兩種版本的OS,RH5能用,RH4卻不能用
另外~官網上有另一個patch: sqlite3_int64_v2.patch
這個不曉得是要上到哪一個檔案 @@"
我用find找到了他patch上的configure.ac,但是行數沒有patch裡寫的2986這麼多行呀 Q口Q
我是裝在 Ubuntu 8.04
網誌上的 patch 來源就是 sqlite3_int64_v2.patch
http://bugs.python.org/file25647/sqlite3_int64_v2.patch