我有一个用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本身没有运气。有没有人遇到过这个问题?
答案 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
以确保您拥有最新版本 - 并验证现在一切工作