我有一个基于Twisted和PyGTK的Python应用程序。Twisted本身依赖于zope.interface,我不直接导入它。
不幸的是,当我尝试运行我的应用程序时,以下错误将出现在错误日志中:
Traceback (most recent call last):
File "tasks.py", line 4, in <module>
File "ui\__init__.pyc", line 14, in <module>
File "twisted\python\log.pyc", line 17, in <module>
ImportError: No module named zope.interface
Traceback (most recent call last):
File "tasks.py", line 4, in <module>
File "ui\__init__.pyc", line 14, in <module>
File "twisted\python\log.pyc", line 17, in <module>
ImportError: No module named zope.interface
Traceback (most recent call last):
File "tasks.py", line 4, in <module>
File "ui\__init__.pyc", line 14, in <module>
File "twisted\python\log.pyc", line 17, in <module>
ImportError: No module named zope.interface
我试过将zope.interface
和zope
的每一个组合添加到INCLUDES
和PACKAGES
,但这样做只会给我这个生成时间错误:
running py2exe
*** searching for required modules ***
C:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecated
import sets
Traceback (most recent call last):
File "setup.py", line 75, in <module>
'gtk/*.ui'
File "C:\Python26\lib\distutils\core.py", line 152, in setup
dist.run_commands()
File "C:\Python26\lib\distutils\dist.py", line 975, in run_commands
self.run_command(cmd)
File "C:\Python26\lib\distutils\dist.py", line 995, in run_command
cmd_obj.run()
File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 243, in run
self._run()
File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 296, in _run
self.find_needed_modules(mf, required_files, required_modules)
File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 1306, in find_needed_modules
mf.import_hook(f)
File "C:\Python26\lib\site-packages\py2exe\mf.py", line 719, in import_hook
return Base.import_hook(self,name,caller,fromlist,level)
File "C:\Python26\lib\site-packages\py2exe\mf.py", line 136, in import_hook
q, tail = self.find_head_package(parent, name)
File "C:\Python26\lib\site-packages\py2exe\mf.py", line 204, in find_head_package
raise ImportError, "No module named " + qname
ImportError: No module named zope
我的setup.py
是:
from distutils.core import setup
import py2exe
def find_data_files(source,target,patterns):
# I've elided this, I doubt it's relevant to the problem
# ...
INCLUDES = [
'cairo',
'pango',
'pangocairo',
'atk',
'gobject',
'gio',
]
PACKAGES = [
'encodings',
]
setup(
name = 'MyApp',
description = 'My Application',
version = '1.0',
windows = [
{
'script': os.path.join('ui','tasks.py'),
'icon_resources': [
(1, os.path.join(
'ui','data','iconpack.ico'))
],
}
],
options = {
'py2exe': {
'packages': ','.join(PACKAGES),
'includes': ','.join(INCLUDES),
}
},
data_files = find_data_files(
'ui', 'ui', [
'data/*',
'gtk/*.ui'
])
)
如何让py2exe来构建这个?
我在Windows XP SP3中使用py2exe创建包时遇到了这个问题。我发现py2exe没有正确地确定依赖关系。
为了解决这个问题,我卸载了第三方软件包,并使用以下easy_install命令安装它们
easy_install -Z <your_package_name>
-Z选项解压包的详细信息,因此不会压缩内容。现在运行py2exe时,它将正确检测依赖项。
希望这有帮助!
我不知道你是否解决过这个问题,或者它是否与你相关,但是对于未来的搜索者,我找到了一个简单的方法来解决zope导入问题here。
具体来说,将空的
__init__.py
文件添加到PYTHONDIR/Lib/site-packages/zope
目录。我用一个
twisted
应用程序测试了这个,使用这个安装文件:Py2exe现在可以使用它成功地为twisted创建一个可执行文件,因为它依赖于zope。
我对
zope.interface
和朋友也有同样的问题(zope.component等)。具体来说,这是一个关于py2exe
如何搜索和发现包和如何安装zope
包的问题。zope
是一个命名空间包,因此依赖于它的.pth
文件中的一些时髦的导入逻辑(请参见zope.interface-3.*.*-py2.*-nspkg.pth
),以便将它的子包添加到python的路径中。在site-packages
中看一看,你就会明白我的意思。py2exe
在“发现”此类包时遇到问题。最后,我做的是手动重新打包我正在使用的各种
zope
包到site-packages
中的stardard模块设置中,然后重新运行py2exe
,然后发现一切都没有问题。这是一个PITA,但是在py2exe
能够处理包装边缘盒和/或zope
包装以友好的方式包装之前,这是您所能做的最好的事情。相关问题 更多 >
编程相关推荐