admin 管理员组

文章数量: 887006

2个多小时,同样热泪盈眶~我是win10+Anaconda的python2.7,问题基本一致

转载自: http://yiisama.lofter/post/1cc07f63_5804e67 楼主折腾这件事情长达10个小时,其中走了不少弯路,现记下方法以备不时之需,或帮助其他和我一样蛋疼到在windows下工作的人。


如果你百度一下windows安装theano,里面多半都是告诉你太麻烦了,让你转用Anaconda、WinPython、pythonxy之类的python发行版IDE。这是因为theano有很多依赖的包,如numpy、scipy等。如果你开始装numpy的话,你会发现你又需要BLAS、ATLAS之类装起来还需要自己手动编译的东西。。。这会让你整个人都不好


于是有这么一个地方

Unofficial Windows Binaries for Python Extension Packages

 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 

你可以直接在这里找到numpy、scipy对应的python版本在windows32位或64位下的安装exe。。。


好了,现在依赖包搞定了,开始装theano。

最简单的是pip install theano,或者下一个theano包用python setup.py install都是可以的。

但是。。。

反正我是遇到了这个问题,theano/gof/cmodules.py里面居然有一句不符合python3.4特性的语句,它会导致你在import theano的时候报错。。。这个语句是:

(stdout, stderr) = pmunicate(input='')

你需要把她改成

(stdout, stderr) = pmunicate(input=b'')

没错就是把那个空字符串从ascii string变成byte string。。。区分两种string,这是python3的特性。

否则它调用subprocess.py里面的方法的时候就会出问题,因为那边需要的是byte string。。。


好了这个问题解决,接下来你再import theano,如果你的mingw是32位的,会报这样一个错误:

Exception: Compilation failed (return status=1): C:\Users\swanheart\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_42_Stepping_7_GenuineIntel-3.4.1-64\lazylinker_ext\mod.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in


如果你去搜一下sorry, unimplemented: 64-bit mode not compiled in就会知道这是gcc版本的问题。。。你需要一个64位的mingw。

所以就装一个64位的mingw(安装时选x86_64架构,posix进程)。

装好之后。。。要改path。。。长期在windows下工作经常需要干的事之一。。。

但是要记得。。。要么把新的mingw64的路径放在旧的前面。。。要么删掉旧的。。。否则就会导致还是使用旧的。。。

而且要清干净。。。

楼主就悲催地清掉了一个旧的gcc路径以为搞定了,结果实际上一直在用haskell platform里面的gcc在那import半天怎么还是错误呢,后来gcc -v --version才发现问题。。。谁能记得haskell platform里面会有个gcc啊!!


最后,差不多快好了。。。这是import还是会报错,不过和之前不一样了。。。

我就只记一下怎么解决吧,从google论坛上看到的,虽然我已经不理解这是怎么回事了……

还是去之前那个地方下一个Libpython的whl文件,用pip下一个wheel,用wheel把它装上。


最后。。。就可以看着它在执行import theano之后沉默了5秒钟,没有报任何错误,换行。


你不禁会想。。。这漫长的5秒里python的解释器、gcc编译器、链接器等等居然都在正常工作,是多么的神奇。。。

本文标签: python Theano