免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8712 | 回复: 12
打印 上一主题 下一主题

win32com打包成py2exe的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-15 04:50 |只看该作者 |倒序浏览
在eclipse中运行什么问题都没有,打包成exe后不能单独运行,报错。

  1. E:\>win32_decrypt.exe
  2. Traceback (most recent call last):
  3.   File "win32_decrypt.py", line 9, in <module>
  4.   File "win32_decrypt.py", line 4, in decryptKey
  5.   File "win32com\client\__init__.pyc", line 95, in Dispatch
  6.   File "win32com\client\dynamic.pyc", line 98, in _GetGoodDispatchAndUserName
  7.   File "win32com\client\dynamic.pyc", line 78, in _GetGoodDispatch
  8. pywintypes.com_error: (-2147221005, '\xce\xde\xd0\xa7\xb5\xc4\xc0\xe0\x
  9. 7\xd6\xb7\xfb\xb4\xae', None, None)

复制代码


网上查了一下这位大侠的
http://hi.baidu.com/wpsoa/blog/item/f400f359314545292834f0f2.html
没发现有什么特别的地方啊?
求教。

论坛徽章:
0
2 [报告]
发表于 2009-04-15 07:10 |只看该作者
最顶部加  #-*- encoding: gb2312 -*-
  或者     #-*- encoding: utf-8 -*-
  试试

论坛徽章:
0
3 [报告]
发表于 2009-04-15 13:08 |只看该作者
和这个没关吧,我头上一直加的是#-*- coding:gbk-*-

论坛徽章:
0
4 [报告]
发表于 2009-04-22 18:02 |只看该作者
这个问题我翻查了很多网站,发现应该是py2exe的一个BUG,有时他会找不到程序所需要的模块,所以没有一起编译进去,解决办法网上说是用一个-i参数
python setup.py py2exe -i win32com.gen_py.*
但是我试过无论怎么加-i win32com.client.* , -i win32com.*都无法把win32com编译进去
在编译过程中,屏显上就显示skip by-compilation of c:\python25\lib\site-packages\win32com\__init__.py等多个文件。

大家看看还有什么解决办法啊。

论坛徽章:
0
5 [报告]
发表于 2009-04-25 06:16 |只看该作者
for p in win32com.__path__[1:]:
        modulefinder.AddPackagePath('win32com', p)
for extra in ['win32com.taskscheduler']:
        __import__(extra)
        m = sys.modules[extra]
        for p in m.__path__[1:]:
                modulefinder.AddPackagePath(extra, p)


加到你setup.py中

论坛徽章:
0
6 [报告]
发表于 2009-04-27 14:18 |只看该作者
试了一下,还是不行呀。
顺便说一下,在开发机上是可以正常运行的,包括使用py2exe打包后也是可以正常运行!但把dist目录下的文件复制到另一台电脑上就不能运行了。

我的setup.py如下


  1. from distutils.core import setup
  2. import win32com.client
  3. import py2exe
  4. import modulefinder,sys
  5. for p in win32com.__path__[1:]:
  6.         modulefinder.AddPackagePath('win32com', p)
  7. for extra in ['win32com.taskscheduler']:
  8.         __import__(extra)
  9.         m = sys.modules[extra]
  10.         for p in m.__path__[1:]:
  11.                 modulefinder.AddPackagePath(extra, p)

  12. setup(console=["win32_decrypt.py"])

复制代码


在其他电脑上运行的报错如下:

  1. D:\dist>win32_decrypt.exe
  2. Traceback (most recent call last):
  3.   File "win32_decrypt.py", line 10, in <module>
  4.   File "win32_decrypt.py", line 5, in decryptKey
  5.   File "win32com\client\__init__.pyc", line 95, in Dispatch
  6.   File "win32com\client\dynamic.pyc", line 98, in _GetGoodDispatchAndUserName
  7.   File "win32com\client\dynamic.pyc", line 78, in _GetGoodDispatch
  8. pywintypes.com_error: (-2147221005, '\xce\xde\xd0\xa7\xb5\xc4\xc0\xe0\xb1\xf0\xd
  9. 7\xd6\xb7\xfb\xb4\xae', None, None)
复制代码


我比较了一下,在setup.py加上你说的这段和不加,py2exe编译后多了二个文件win32api.pyd和win32ui.pyd,感觉不是我要的东东呢。

论坛徽章:
0
7 [报告]
发表于 2009-04-27 18:20 |只看该作者
调用控件需预做GEN的
把相关调用控件代码显出来,否则谁也搞不清

论坛徽章:
0
8 [报告]
发表于 2009-04-27 19:58 |只看该作者
是不是你调用的com ,在测试机器上没安装。比如如果在一台机器上安装office ,
你用wincom调用execl的com 组件 是会报错。

论坛徽章:
0
9 [报告]
发表于 2009-04-27 21:09 |只看该作者
我的原程序很简单啊,如下

  1. import win32com.client
  2. EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData')
  3. EncryptedData.Algorithm.KeyLength = 4
  4. EncryptedData.Algorithm.Name = 1
  5. EncryptedData.SetSecret('abcdfjfi')
  6. EncryptedData.Content = 'Hello world'
  7. s = EncryptedData.Encrypt()

  8. print s #加密
  9. EncryptedData.Decrypt(s)
  10. print EncryptedData.Content #解密


复制代码

我在开发机上运行是成功的,我想想也可能是楼上二位说的道理,可是我还是Python苦手,对这个原理也还不太通呢,能不能帮我讲讲,然后给个解决建议呢?

论坛徽章:
0
10 [报告]
发表于 2009-05-01 07:28 |只看该作者
我觉得是你测试机器上没有安装CAPICOM.EncryptedData com组件。跟python 没关系,是window的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP