【问题标题】:Error packaging program in py2apppy2app中打包程序出错
【发布时间】:2014-01-14 06:01:08
【问题描述】:

我有一个用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 本身,但没有成功。有人遇到过这个问题吗?

【问题讨论】:

  • 你是如何安装setuptools的? “无法打开或提取”是什么意思? (例如,您尝试了什么,发生了什么?)您可以强制更新它,还是卸载它并重新安装?
  • 为了安装 setuptools,我运行了从 Pypi 下载的 ez_setup.py。为了打开 egg 文件,我尝试下载第三方工具,但它崩溃了,并将其重命名为 .zip,但失败了。如果我只是双击它,我会得到“选择默认应用程序”弹出窗口。我试过卸载重装,强制更新的流程是什么?
  • @abarnet 看起来我的setuptools 安装有缺陷。最好的安装方法是什么?
  • 假设你的 Python 没有预装 setuptools(它看起来像一个 python.org 二进制安装程序,在这种情况下它没有),你可以删除鸡蛋,然后按照usual instructionsez_setup.py

标签: python python-3.3 setuptools py2app


【解决方案1】:

问题似乎在于您的setuptools 以某种方式损坏了。


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

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

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

$ unzip -t setuptools.egg

这将检查所有 zip 标头,并检查存档中所有文件的 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,那么也杀掉它。这在其他地方留下一些文件(特别是在您的 PATH 中某处的 easy_install-3.3),但它们会被安装正确覆盖,所以没关系。

要安装,只需按照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,您可能需要在重新安装setuptoolspip install -U setuptools pip 后重新安装它,以确保您拥有最新版本,并验证现在一切正常。

【讨论】:

  • 我从终端运行$ 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:你有没有可能同时拥有一个鸡蛋和一个解压的包裹?因为这可能会混淆py2app,但不会混淆pip。也可以想象您的zipimport 支持以某种方式搞砸了,但这似乎不太可能。当然,您的py2app 可能会被破坏。
  • @dcastello:无论如何,如果您按照我的回答中的步骤进行操作,我很确定您最终应该得到一个解压缩的setuptools 而不是一个鸡蛋安装,并且值得看看@987654347 是否@ 对此很满意。
  • 当我输入上面的终端命令时,我收到错误-bash: wget: command not found。我还需要安装其他东西才能使用wget吗?
  • 快速谷歌搜索告诉我 OS 10.9 不包括 wget,但可以下载它。可以用curl 运行相同的命令,还是应该尝试wget
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2013-03-15
  • 2013-11-20
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多