天天看點

Python中MySQLdb子產品的安裝安裝安裝中遇到的問題

安裝

MySQLdb是Python語言通路mysql資料庫的一個子產品,如果你不确定自己的Python環境中是否已經安裝了這個子產品,可以打開Python shell,輸入import MySQLdb,如果是傳回錯誤,那就表明沒有安裝這個Python子產品。下面就是在centos安裝它的流程以及在安裝過程中遇到的一些問題:

首先,在http://sourceforge.net/projects/mysql-python/ 這個網站上,我們可以下到這個類庫

然後解壓這個檔案

tar xfz MySQL-python-1.2.4b4.tar.gz
           
cd MySQL-python-1.2.4b4
           

在site.cfg檔案中,我們需要做一下簡單的配置

mysql_config = /usr/bin/mysql_config
           

最後就是

python setup.py build
python setup.py install
           

安裝中遇到的問題

第一點

_mysql.c:740: 警告:隐式聲明函數 ‘mysql_debug’
_mysql.c: In function ‘_mysql_ConnectionObject_dump_debug_info’:
_mysql.c:758: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:760: 警告:隐式聲明函數 ‘mysql_dump_debug_info’
_mysql.c:760: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_autocommit’:
_mysql.c:784: 警告:隐式聲明函數 ‘mysql_query’
_mysql.c:784: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_commit’:
_mysql.c:807: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_rollback’:
_mysql.c:829: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_errno’:
_mysql.c:941: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:942: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_error’:
_mysql.c:957: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:958: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:958: 警告:傳遞參數 1 (屬于 ‘PyString_FromString’)時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_escape_string’:
_mysql.c:982: 警告:隐式聲明函數 ‘mysql_escape_string’
_mysql.c: In function ‘_mysql_escape’:
_mysql.c:1089: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘converter’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_describe’:
_mysql.c:1169: 錯誤:‘MYSQL_FIELD’ 未聲明 (在此函數内第一次使用)
_mysql.c:1169: 錯誤:‘fields’ 未聲明 (在此函數内第一次使用)
_mysql.c:1172: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1173: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1174: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1185: 警告:隐式聲明函數 ‘IS_NOT_NULL’
_mysql.c: In function ‘_mysql_ResultObject_field_flags’:
_mysql.c:1205: 錯誤:‘MYSQL_FIELD’ 未聲明 (在此函數内第一次使用)
_mysql.c:1205: 錯誤:‘fields’ 未聲明 (在此函數内第一次使用)
_mysql.c:1208: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1209: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1210: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: 在頂層:
_mysql.c:1251: 錯誤:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_tuple’:
_mysql.c:1257: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1259: 警告:隐式聲明函數 ‘mysql_fetch_lengths’
_mysql.c:1259: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1259: 警告:指派時将整數賦給指針,未作類型轉換
_mysql.c:1262: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:1263: 錯誤:‘row’ 未聲明 (在此函數内第一次使用)
_mysql.c: 在頂層:
_mysql.c:1276: 錯誤:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_dict’:
_mysql.c:1281: 錯誤:‘MYSQL_FIELD’ 未聲明 (在此函數内第一次使用)
_mysql.c:1281: 錯誤:‘fields’ 未聲明 (在此函數内第一次使用)
_mysql.c:1283: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1285: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1285: 警告:指派時将整數賦給指針,未作類型轉換
_mysql.c:1286: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1289: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:1290: 錯誤:‘row’ 未聲明 (在此函數内第一次使用)
_mysql.c: 在頂層:
_mysql.c:1315: 錯誤:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_dict_old’:
_mysql.c:1320: 錯誤:‘MYSQL_FIELD’ 未聲明 (在此函數内第一次使用)
_mysql.c:1320: 錯誤:‘fields’ 未聲明 (在此函數内第一次使用)
_mysql.c:1322: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1324: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1324: 警告:指派時将整數賦給指針,未作類型轉換
_mysql.c:1325: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1328: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:1329: 錯誤:‘row’ 未聲明 (在此函數内第一次使用)
_mysql.c: 在頂層:
_mysql.c:1351: 錯誤:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql__fetch_row’:
_mysql.c:1362: 錯誤:‘MYSQL_ROW’ 未聲明 (在此函數内第一次使用)
_mysql.c:1362: 錯誤:expected ‘;’ before ‘row’
_mysql.c:1366: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘use’ 的成員
_mysql.c:1367: 錯誤:‘row’ 未聲明 (在此函數内第一次使用)
_mysql.c:1367: 警告:隐式聲明函數 ‘mysql_fetch_row’
_mysql.c:1367: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1370: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:1373: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1381: 錯誤:提供給函數 ‘convert_row’ 的實參太多
_mysql.c: In function ‘_mysql_ResultObject_fetch_row’:
_mysql.c:1405: 錯誤:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c:1420: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1432: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘use’ 的成員
_mysql.c:1446: 警告:隐式聲明函數 ‘mysql_num_rows’
_mysql.c:1446: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_character_set_name’:
_mysql.c:1513: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c: In function ‘_mysql_get_client_info’:
_mysql.c:1604: 警告:隐式聲明函數 ‘mysql_get_client_info’
_mysql.c:1604: 警告:傳遞參數 1 (屬于 ‘PyString_FromString’)時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_ConnectionObject_get_host_info’:
_mysql.c:1618: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1619: 警告:隐式聲明函數 ‘mysql_get_host_info’
_mysql.c:1619: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1619: 警告:傳遞參數 1 (屬于 ‘PyString_FromString’)時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_ConnectionObject_get_proto_info’:
_mysql.c:1633: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1634: 警告:隐式聲明函數 ‘mysql_get_proto_info’
_mysql.c:1634: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_get_server_info’:
_mysql.c:1648: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1649: 警告:隐式聲明函數 ‘mysql_get_server_info’
_mysql.c:1649: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1649: 警告:傳遞參數 1 (屬于 ‘PyString_FromString’)時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_ConnectionObject_info’:
_mysql.c:1665: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1666: 警告:隐式聲明函數 ‘mysql_info’
_mysql.c:1666: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1666: 警告:指派時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_ConnectionObject_insert_id’:
_mysql.c:1698: 錯誤:‘my_ulonglong’ 未聲明 (在此函數内第一次使用)
_mysql.c:1698: 錯誤:expected ‘;’ before ‘r’
_mysql.c:1700: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1702: 錯誤:‘r’ 未聲明 (在此函數内第一次使用)
_mysql.c:1702: 警告:隐式聲明函數 ‘mysql_insert_id’
_mysql.c:1702: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_kill’:
_mysql.c:1719: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1721: 警告:隐式聲明函數 ‘mysql_kill’
_mysql.c:1721: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_field_count’:
_mysql.c:1740: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1742: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_num_fields’:
_mysql.c:1757: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1758: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_num_rows’:
_mysql.c:1773: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1774: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_ping’:
_mysql.c:1803: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1804: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1806: 警告:隐式聲明函數 ‘mysql_ping’
_mysql.c:1806: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_query’:
_mysql.c:1827: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1829: 警告:隐式聲明函數 ‘mysql_real_query’
_mysql.c:1829: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_select_db’:
_mysql.c:1857: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1859: 警告:隐式聲明函數 ‘mysql_select_db’
_mysql.c:1859: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_shutdown’:
_mysql.c:1878: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1880: 警告:隐式聲明函數 ‘mysql_shutdown’
_mysql.c:1880: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_stat’:
_mysql.c:1905: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1907: 警告:隐式聲明函數 ‘mysql_stat’
_mysql.c:1907: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:1907: 警告:指派時将整數賦給指針,未作類型轉換
_mysql.c: In function ‘_mysql_ConnectionObject_store_result’:
_mysql.c:1928: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1929: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:1938: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_thread_id’:
_mysql.c:1967: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1969: 警告:隐式聲明函數 ‘mysql_thread_id’
_mysql.c:1969: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_use_result’:
_mysql.c:1989: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:1990: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:1999: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_dealloc’:
_mysql.c:2017: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c: In function ‘_mysql_ConnectionObject_repr’:
_mysql.c:2029: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:2030: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_data_seek’:
_mysql.c:2048: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:2049: 警告:隐式聲明函數 ‘mysql_data_seek’
_mysql.c:2049: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_row_seek’:
_mysql.c:2062: 錯誤:‘MYSQL_ROW_OFFSET’ 未聲明 (在此函數内第一次使用)
_mysql.c:2062: 錯誤:expected ‘;’ before ‘r’
_mysql.c:2064: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:2065: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘use’ 的成員
_mysql.c:2070: 錯誤:‘r’ 未聲明 (在此函數内第一次使用)
_mysql.c:2070: 警告:隐式聲明函數 ‘mysql_row_tell’
_mysql.c:2070: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:2071: 警告:隐式聲明函數 ‘mysql_row_seek’
_mysql.c:2071: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_row_tell’:
_mysql.c:2083: 錯誤:‘MYSQL_ROW_OFFSET’ 未聲明 (在此函數内第一次使用)
_mysql.c:2083: 錯誤:expected ‘;’ before ‘r’
_mysql.c:2085: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:2086: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘use’ 的成員
_mysql.c:2091: 錯誤:‘r’ 未聲明 (在此函數内第一次使用)
_mysql.c:2091: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c:2092: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: In function ‘_mysql_ResultObject_dealloc’:
_mysql.c:2100: 警告:隐式聲明函數 ‘mysql_free_result’
_mysql.c:2100: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘result’ 的成員
_mysql.c: 在頂層:
_mysql.c:2331: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
_mysql.c:2338: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:2345: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:2352: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:2359: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘connection’ 的成員
_mysql.c:2422: 錯誤:‘_mysql_ResultObject’ 沒有名為 ‘converter’ 的成員
_mysql.c:2422: 錯誤:初始值設定元素不是常量
_mysql.c:2422: 錯誤:(在 ‘_mysql_ResultObject_memberlist[0].offset’ 的初始化附近)
_mysql.c: In function ‘_mysql_ConnectionObject_getattr’:
_mysql.c:2444: 錯誤:‘_mysql_ConnectionObject’ 沒有名為 ‘open’ 的成員
error: command 'gcc' failed with exit status 1
           

解決辦法就是安裝mysql-devel依賴包:

yum install mysql-devel
           

第二點

running build
running build_py
copying MySQLdb/release.py -> build/lib.linux-i686-2.4/MySQLdb
running build_ext
building '_mysql' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-siz                                      e=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fPIC -Dversion_info=(1,2,4,'beta',4) -D__version__=1.                                      2.4b4 -I/usr/local/mysql/include/mysql -I/usr/include/python2.4 -c _mysql.c -o build/temp.linux-i686-2.4/_mysql.o -g -DUNIV_LINUX
_mysql.c: In function ‘_mysql_ConnectionObject_Initialize’:
_mysql.c:602: error: expected expression before ‘)’ token
error: command 'gcc' failed with exit status 1
           

這裡是源碼有些問題:在_mysql.c 602行附近,找到下邊的代碼:

if (!PyArg_ParseTupleAndKeywords(args, kwargs,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
"|ssssisOiiisssiOii:connect",
#else
"|ssssisOiiisssiOi:connect",
#endif
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
&connect_timeout,
&compress, &named_pipe,
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
&local_infile,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
&read_timeout
#endif
))
return -1;
           

改為

if (!PyArg_ParseTupleAndKeywords(args, kwargs,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
"|ssssisOiiisssiOii:connect",
#else
"|ssssisOiiisssiOi:connect",
#endif
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
&connect_timeout,
&compress, &named_pipe,
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
&local_infile
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
, &read_timeout
#endif
))
return -1;
           

然後再執行

python setup.py build
python setup.py install
           

如果還是有問題,可以參考install檔案,裡面有在安裝MySQLdb時一些需要注意的事項。

參考連結

[1] http://bbs.chinaunix.net/thread-3574499-1-1.html

[2]http://cooler1217.iteye.com/blog/1497472

[3]http://www.phpv5.com/blog/mysqlpython-setup-error

[4]http://www.cnblogs.com/czh-liyu/archive/2008/04/13/1151758.html

轉載于:https://www.cnblogs.com/yue-/p/6260046.html