错误打包py2app中的程序

时间:2014-01-14 06:01:09

标签: python python-3.3 setuptools py2app

我有一个用python 3.3编写的程序,我希望能够在不需要用户安装python或任何其他模块的情况下进行分发。我能够在Windows上使用cx_Freeze成功打包此程序,但OS X上的相同脚本生成了一个无法启动的应用程序。

我认为使用py2app可能会更好运,但现在我遇到了一个奇怪的问题。程序打开(它有一个用tkinter构建的GUI)并在Alias模式下构建时运行完美。但是,当我尝试构建最终版本时,我在终端中收到以下消息:

error: No such file or directory: /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/setuptools-2.1-py3.3.egg/_markerlib/__init__.pyc

我导航到该目录并找到了我无法打开或提取的.egg文件。我已经尝试重新安装设置工具以及python本身没有运气。有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

看起来问题是你的setuptools在某种程度上被打破了。


  

要打开egg文件,我尝试下载崩溃的第三方工具,并将其重命名为.zip,但失败了。如果我只是双击它,我会弹出“选择默认应用程序”。

双击它依赖于扩展程序来决定要启动的应用程序。

检查某些内容是否为有效zip文件的最佳方法是使用命令行中的unzip工具。例如:

$ unzip -t setuptools.egg

这将检查所有zip标头,并检查存档中所有文件的CRC,并报告任何错误。或者,如果它根本不是拉链,它会在开始时报告一个错误。

您还可以使用file命令快速检查它是否是一些众所周知的文件类型。如果file /path/to/setuptools-whatever.egg只是说“数据”而不是“Zip存档数据”,那么它可能已被腐蚀而无法识别。


无论如何,假设你的setuptools没有附带你的Python安装(如果你使用的是python.org二进制安装程序,它没有),最安全的做法是卸载它,然后重新安装它干净利落。

首先卸载的重要原因是,默认情况下,当前版本不会安装.egg存档,而是安装一个普通的解压缩包和egg-info目录,这意味着它可能不会覆盖旧的,破坏的副本。

文档covers uninstalling。只需从setuptools(以及setuptools*上的任何其他位置)删除site-packages .egg文件以及其他任何名为sys.path的文件。如果你也有distribute,也可以杀掉它。这个在其他地方留下一些文件(特别是你的PATH上的easy_install-3.3),但它们会被安装正确覆盖,所以没关系。

要安装,只需按照usual instructions重新安装即可:

$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python

...或者,如果您没有对site-packages的写访问权:

$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | sudo python

如果您使用pip,则可能需要在重新安装setuptools之后重新安装,然后pip install -U setuptools pip以确保您拥有最新版本 - 并验证现在一切工作