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对之前所安装的插件无影响
2. Win7 64位安装 theano, ImportError: not import name gof
本文在32位机器上安装theano时(之前需要安装cygwin 或者mingw),之后输入'from theano import *', 可以启动,没问题;
可是在笔记本win7 64位安装theano,使用 'from theano import *'时,显示进行一系列的貌似编译的工作,之后在使用此命令时导入theano时,最后提示:“ImportError: not import name gof”。
在网上没有找到很好的关于gof的解决方案(有英文的,但是回答者也没说清楚),说是先安装libpython1.2,等等,重装了几次,最后提示“pythonw.exe已停止工作”,实在没招了,因为急着要用,暂时没时间解决这个问题,于是按照theano官网上说的使用Anaconda安装,步骤如下:
① 首先下载并安装Anaconda,下载地址:http://www.continuum.io/downloads,本文现在windows 64
下载theano的zip文件: https://github.com/Theano/Theano  ,解压到E:/Anaconda/Lib/site-packages/theano( 文件里面有个theano的文件夹,拿出来放在E:/Anaconda/Lib/site-packages里面 )目录下。
添加环境变量:    path: E:/Anaconda/MinGW/bin;E:/Anaconda/MinGW/x86_64-w64-mingw32/lib;  

                              (32bit  E:/Anaconda/MinGW/i686-w64-mingw32/lib;)   

新建环境变量:  PYTHONPATH: E:/Anaconda/Lib/site-packages/theano;

Theano win7 64位安装,可参考:Deep Learning 开发工具Theano安装配置

本人PC机(32位)安装Anaconda和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代码   收藏代码
  1. Problem occurred during compilation with the command line below:  
  2.   
  3. g++ -shared -g -m64 -fPIC -I/usr/local/lib/python2.7/site-packages/numpy/cor  
  4. e/include -I/usr/local/include/python2.7 -o /root/.theano/compiledir_Linux-2  
  5. .6.18-308.el5-x86_64-with-redhat-5.8-Tikanga-x86_64-2.7.3-64/lazylinker_ext/  
  6. lazylinker_ext.so /root/.theano/compiledir_Linux-2.6.18-308.el5-x86_64-with-  
  7. redhat-5.8-Tikanga-x86_64-2.7.3-64/lazylinker_ext/mod.cpp -L/usr/local/lib -  
  8. lpython2.7  
  9.   
  10. /usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_  
  11. 32 against `a local symbol' can not be used when making a shared object; rec  
  12. ompile with -fPIC  
  13.   
  14. /usr/local/lib/libpython2.7.a: could not read symbols: Bad value  
  15.   
  16. collect2: ld returned 1 exit status  
  17.   
  18. Traceback (most recent call last):  
  19.   
  20.   File "<stdin>", line 1, in <module>  
  21.   
  22.   File "theano/__init__.py", line 55, in <module>  
  23.   
  24.     from theano.compile import \  
  25.   
  26.   File "theano/compile/__init__.py", line 5, in <module>  
  27.   
  28.     from theano.compile.function_module import *  
  29.   
  30.   File "theano/compile/function_module.py", line 18, in <module>  
  31.   
  32.     import theano.compile.mode  
  33.   
  34.   File "theano/compile/mode.py", line 11, in <module>  
  35.   
  36.     import theano.gof.vm  
  37.   
  38.   File "theano/gof/vm.py", line 486, in <module>  
  39.   
  40.     import lazylinker_c  
  41.   
  42.   File "theano/gof/lazylinker_c.py", line 89, in <module>  
  43.   
  44.     preargs=args)  
  45.   
  46.   File "theano/gof/cmodule.py", line 1829, in compile_str  
  47.   
  48.     (status, compile_stderr.replace(b('\n'), b('. '))))  
  49.   
  50. Exception: Compilation failed (return status=1): /usr/bin/ld: /usr/local/lib  
  51. /libpython2.7.a(abstract.o): relocation R_X86_64_32 against `a local symbol'  
  52.  can not be used when making a shared object; recompile with -fPIC. /usr/loc  
  53. al/lib/libpython2.7.a: could not read symbols: Bad value. collect2: ld retur  
  54. 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代码   收藏代码
  1. ./configure --prefix=/usr/local/  –enable-shared CFLAGS=-fPIC  
  2. make  
  3. 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


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值