Archive for October, 2011

cx_Freeze打包gevent时遇到的问题

Saturday, October 8th, 2011

写python就是个玩蛋的活,还是cx_Freeze,在mac osx下打包gevent程序提示无法import的错误,gevent,greenlet都是easy_install安装的,程序里引入木有问题的,只有cx_Freeze打包时提示错误。

鉴于之前的经验,这次没作无谓的抵抗,直接去cx_Freeze的源代码里调试,几经折腾发现cx_Freeze这厮是不能从包好的egg里import的,在Freebsd环境下easy_install安装后的egg其实是个文件夹,而在mac osx和windows下egg是个压缩包,于是将egg原地敲碎释放在site-package目录下就好了。

顺便处理一个小warnning

/Users/zhangdi/Downloads/test/gevent_test/output/dist/main/gevent/socket.py:788: DeprecationWarning: gevent.sslold is deprecated; use gevent.ssl instead (install ssl package from PyPI)
直接去代码里改一下就可以了

cx_Freeze在freebsd下恼人的问题

Friday, October 7th, 2011
在64位freebsd7.3中用cx_Freeze打包时遇到的问题
Traceback (most recent call last):
 ....
     import socket
  File "/usr/local/lib/python2.6/socket.py", line 64, in <module>
    from _ssl import SSLError as sslerror
ImportError: cannot import name SSLError
一顿找原因啊,google啊啥的各种无解啊。最后无奈看了下socket.py的源码
try:
    import _ssl
except ImportError:
    # no SSL support
    pass  嗯嗯,很好,这里pass了
else:
还好如果import不到的话pass了,于是乎,我很可耻的excludes掉了ssl
buildOptions = dict(
        compressed = True,
        optimize = 1,
        includes = ["_ctypes", "socket", '_socket', ],
        excludes = ['ssl', '_ssl', ],
        path = sys.path + ["modules"]
    )