追风逐月

关注网络赚钱、网赚经验、网赚工具、SEO、国外主机信息

推荐使用

订阅追风逐月博客feed
订阅到google 订阅到哪吒
订阅到鲜果 订阅到抓虾
* 更多订阅本站方式请看 订阅帮助

终于解决”dynamic module does not define init function (initlibxml2)”问题

2007年08月01日 • 追风逐月 • 分类: 技术开发

Py2exe和libxml2真是一个让人又爱又恨的东西。特别和python结合起来,时不时就给你来点问题。
因为要发布到没有安装过python的机器上,所以使用了py2exe来打包应用程序。以前一直都好好的,最近一次打包却出现了

dynamic module does not define init function (initlibxml2)

的错误,想想最近曾经更新过libxml2,于是恢复到旧的版本,还是不行。
Google了一下,找到几个方法,但都是似懂非懂的。
折腾半天,最近总算是弄明白了,原来还是py2exe的问题:
由于程序使用打包的方式,打包运行后和直接运行.py程序的区别是sys.path不同了,原来版本py2exe打包后
len(sys.path)=1,但现在可能是py2exe什么时候升级过,变成了len(sys.path)=2了,也就是说:

PLAIN TEXT

PYTHON:

  1. sys.path=[‘E:\\bot\\src\\dist’,‘E:\\bot\\src\\dist\\bot2.exe’]

这样的话,每次加载libxml2的时候,都会先查找dist,再查找exe本身,而dist目录下正好包含了libxml2.dll,而这是一个非python化的动态库,当然就报错了

知道了原因,解决起来就方便了,在应用程序头上加上

PLAIN TEXT

PYTHON:

  1. if len(sys.path)>1:

  2. sys.path.insert(0,sys.path[-1])

  3. print sys.path

将调用路径换一下就可以了。

标签: , , ,

你可能还喜欢



发表你的意见