2014-01-14 54 views
0

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

我想我可能运气更好使用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本身,但没有运气。有没有人遇到过这个问题?

+0

你是怎么安装'setuptools'的? “无法打开或提取”是什么意思? (如在,你尝试了什么,发生了什么?)你可以强制更新它,或卸载它并重新安装它? – abarnert

+0

要安装'setuptools',我运行了从Pypi下载的'ez_setup.py'。要打开egg文件,我尝试下载第三方工具,该工具崩溃,并将其重命名为.zip,失败。如果我只是双击它,我会得到“选择默认应用程序”弹出窗口。我试过卸载并重新安装,强制更新的过程是什么? – dcastello

+0

@abarnet它看起来像我的'setuptools'安装有缺陷。安装它的最佳方式是什么? – dcastello

回答

0

看起来问题是你的setuptools在某种程度上是坏的。


To open the egg file, I tried downloading a third party tool, which crashed, and renaming it as a .zip, which failed. If I just double click on it, I get the "choose default application" popup.

双击它依靠扩展到决定推出什么样的应用程序。

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

$ unzip -t setuptools.egg 

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

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


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

首先卸载它很重要的原因是,默认情况下,当前版本不会安装.egg归档文件,而是会安装一个正常的解压缩包和egg-info目录,这意味着它不会覆盖旧的,打破的副本。

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

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

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

...或者,如果你没有到站点包的写访问:

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

如果使用pip,你可能要重新安装setuptools后重新安装它,然后pip install -U setuptools pip只是为了确保您有最新的版本,并确认一切工作了。

+0

我从终端运行'$ unzip -t setuptools.egg',并且py2app报告丢失的文件就在那里!下面是输出:“存档:setuptools的-2.1-py3.3.egg 测试:easy_install.py OK 测试:pkg_resources.py OK 测试:__pycache __/easy_install.cpython-33.pyc OK 测试:__pycache __/pkg_resources才能。 CPython的-33.pyc OK 测试:_markerlib/__ init__.py OK 测试:_markerlib/markers.py OK' – dcastello

+0

@dcastello:有没有可能是你同时拥有一个鸡蛋和一个解压缩包?因为这可能会引起混淆,例如,“py2app”而不是“pip”。也可以想象,你的'zipimport'支持不知何故被搞砸了,但这似乎不太可能。当然你的'py2app'可能会被破坏。 – abarnert

+0

@dcastello:无论如何,如果你做我的答案的步骤,我敢肯定,你应该有一个解压的'setuptools',而不是一个鸡蛋安装结束了,这是值得一看py2app'是否'很乐意这么做。 – abarnert