Python錯誤集錦
1. centos更新到python2.7時,無法正常使用方向鍵:
此問題原地址(感謝作者的分享):here
圖中的方向鍵全部被轉義了,在互動模式下使用非常不方便。 這個問題主要是由於缺少readline Module問題導致的。而CentOS預設只有readline模組而沒有readline-devel開發模組。所以只要安裝下即可。
#安裝readline-devel
$yum -y install readline-devl
#重新安裝python
$./configure
$make install
到此問題應該已經解決了。如果還是不行,可以嘗試使用Python自帶的readline模組。
注:重新安裝python對之前所安裝的外掛無影響(32bit E:/Anaconda/MinGW/i686-w64-mingw32/lib;)
新建環境變數: PYTHONPATH: E:/Anaconda/Lib/site-packages/theano;
1. 首先安裝MinGW,預設安裝在C:/MinGW, 配置環境變數:PATH= ...; C:/MinGW/bin 2. 安裝Anaconda-32.exe 從官網上下載, 配置環境變數;參看:Deep Learning Theano安裝配置 3. 手動配置theano, 下載theano.zip檔案,解壓導‘Anaconda安裝目錄/Lib/site-packages/theano’中, 在'C:/users/使用者名稱'目錄下,新建'.theanorc.txt'檔案,輸入以下內容: [global] openmp=False [blas] ldflags= [gcc] cxxflags = -IC:/MinGW/include 之後,在CMD中,測試是否安裝成功:
分別輸入 python, import theano, print theano.config.blas.ldflags 如果沒有出錯,則說明安裝成功 注: win7下已如果安裝cygwin而不是mingw, 進行import theano時,可能多次編譯,並提示'ImportError: not import name gof'錯誤,theano官網上有說明:"Note that it should be possible to run Theano withCygwin instead of MinGW, but this has not been tested yet", 這說明cygwin不能安裝成功,本人之前安裝的是cygwin,不得已換成mingw~ 3. Centos6.4 安裝theano出現的錯誤: 在安裝好numpy、scipy、theano後。
在python程式碼中,敲入:import theano,報錯如下:
Error程式碼
- Problem occurred during compilation with the command line below:
- g++ -shared -g -m64 -fPIC -I/usr/local/lib/python2.7/site-packages/numpy/cor
- e/include -I/usr/local/include/python2.7 -o /root/.theano/compiledir_Linux-2
- .6.18-308.el5-x86_64-with-redhat-5.8-Tikanga-x86_64-2.7.3-64/lazylinker_ext/
- lazylinker_ext.so /root/.theano/compiledir_Linux-2.6.18-308.el5-x86_64-with-
- redhat-5.8-Tikanga-x86_64-2.7.3-64/lazylinker_ext/mod.cpp -L/usr/local/lib -
- lpython2.7
- /usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_
- 32 against `a local symbol' can not be used when making a shared object; rec
- ompile with -fPIC
- /usr/local/lib/libpython2.7.a: could not read symbols: Bad value
- collect2: ld returned 1 exit status
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "theano/__init__.py", line 55, in <module>
- from theano.compile import \
- File "theano/compile/__init__.py", line 5, in <module>
- from theano.compile.function_module import *
- File "theano/compile/function_module.py", line 18, in <module>
- import theano.compile.mode
- File "theano/compile/mode.py", line 11, in <module>
- import theano.gof.vm
- File "theano/gof/vm.py", line 486, in <module>
- import lazylinker_c
- File "theano/gof/lazylinker_c.py", line 89, in <module>
- preargs=args)
- File "theano/gof/cmodule.py", line 1829, in compile_str
- (status, compile_stderr.replace(b('\n'), b('. '))))
- Exception: Compilation failed (return status=1): /usr/bin/ld: /usr/local/lib
- /libpython2.7.a(abstract.o): relocation R_X86_64_32 against `a local symbol'
- can not be used when making a shared object; recompile with -fPIC. /usr/loc
- al/lib/libpython2.7.a: could not read symbols: Bad value. collect2: ld retur
- ned 1 exit status.
仔細分析錯誤程式碼之後,定位原因在於,
python在編譯時,libpython2.7.a庫中的abstract.o模組的編譯過程中,沒有加上-fPIC;
按照網上的方法,各種在python編譯過程中加上-fPIC引數,都沒有解決;
最後仔細看make命令的輸出結果,發現abstract.o模組根本就沒有經過編譯。
繼續最終,發現Python的原始碼路徑中Object下,abstract.c和abstract.o都存在,而且這個檔案是下載python包是就已經編譯好了的(生成了.o檔案);
然後刪除所有.o檔案,然後重新make,在make,就有abstract.o的編譯過程了。
尼瑪,這個問題整整搞了我10個小時,不知道能不能完全解決。
------------
尼瑪,就知道沒有那麼容易,後來又報另外一個包需要重新編譯。
然後我把Python原始碼目錄中所有自帶的.o檔案刪了,然後就ok啦。。。
安裝命令如下:
Shell程式碼
- ./configure --prefix=/usr/local/ –enable-shared CFLAGS=-fPIC
- make
- make install
4. theano安裝方法:
安裝theano之前,需要安裝blas, blas-devel, lapack, lapack-devel, atlas, atlas-devel, numpy, scipy
第一步:yum install blas, blas-devel, lapack, lapack-devel, atlas, atlas-devel
第二布:pip install numpy, pip install scipy # 之前確保已安裝pip
第三步: pip install theano
進入python之後,可能會出現3中的錯誤,按照其解決方案更改; 也有可能出現5處出現的錯誤~
5. import theano後,出現錯誤:"ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory":
錯誤原因:
由於在系統的lib路徑中找不到這個共享庫。
注: 如果編譯時加上了--enable-shared,才會編譯這個共享庫,預設的位置是python可執行程式所在目錄的lib目錄下,如/usr/local/python274
重新編譯後,將 libpython2.7.so.1.0 所在檔案目錄(如/usr/local/python274)放在環境變數PATH中: vim /etc/profile ,
6. 32位機器上,MySQLdb 連線mysql出錯: _mysql_exceptions.OperationalError:(2003, ''Can't....(10061)'')
解決辦法,將host='localhoist' 改為 host='127.0.0.1',即可
7. pydev + eclipse + python 中文亂碼問題
解決方案:
Eclipse的設定
window->preferences->general->editors->text editors->spelling->encoding->UTF-8
window->preferences->workspace->text file encoding->UTF-8
開啟eclipse安裝目錄->eclipse.ini,末行加上”-Dfile.encoding=UTF-8”
檔案編碼
py檔案記得儲存成UTF-8,檔案首行加上”#coding=utf-8”
run時設定
run-->run configurations->python run->Common-> Encoding ->UTF-8
注:亂碼部分需要刪去,重寫
8. TypeError: 'str' object is not callable
當一般內部函式被用作變數名後可能出現此錯誤。比如:
range=1
for i in range(0,1):
………
就會報這樣的錯誤
這樣的錯會報在for行,但是時間引起的原因卻是在range=1這行,如果兩行相距較遠,怎很難被發現。所以要特別注意不要用內部已有的變數和函式名作自定義變數名。
解決方案:更改變數名, 不要與內部函式名 重名,如:str, range等9. ValueError: operands could not be broadcast together with shapes (3000,20) (20,20)
本人出現的問題是,兩個陣列A,B的大小分別為(3000,20) (20,20), 是<numpy.ndarray>型別,而不是<matrix>型別,直接進行乘積C = A*B, 之後,提示上述錯誤,原因是陣列大小“不一致”, 解決方案,不用"*"符號,使用numpy中的dot()函式,可以實現兩個二維陣列的乘積,或者將陣列型別轉化為矩陣型別,使用"*"相乘,具體如下:
A = numpy.array([1,2], [3,4], [5,6]) # 3*2 numpy.ndarray
B = numpy.array([1,2,3], [4,5,6]) # 2*3 numpy.ndarray
C = A * B # raise error: ValueError: operands could not be broadcast together with shapes (3,2) (2,2)
# solution method 1
C = numpy.dot(A, B) # C: 3*3 numpy.ndarray
# solution method 2
A_mat = numpy.matrix(A)
B_mat = numpy.matrix(B)
C = A_mat * B_mat # C: 3*3 numpy.matrixlib.defmatrix.matrix