1. centos更新到python2.7时,无法正常使用方向键:
#安装readline-devel
$yum -y install readline-devl
#重新安装python
$./configure
$make install
到此问题应该已经解决了。如果还是不行,可以尝试使用Python自带的readline模块。
(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
分别输入 python, import theano, print theano.config.blas.ldflags
在python代码中,敲入:import theano,报错如下:
- 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啦。。。
安装命令如下:
- ./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