在Mac OS X Yosemite(10.10)上使用cx_Freeze构建独立应用失败

3
我尝试在Mac OS X Yosemite 10.10上使用cx_Freeze 4.3.1构建应用程序,但失败了。我使用的是Python 2.7版本,并使用Tkinter作为GUI进行开发。如果我在终端上使用python setup.py bdist_mac,则构建过程将失败,并显示以下错误消息:

[Errno2]/Library/Frameworks/Tcl.framework/versions/8.5/TCL no such file or directory

最新版本(8.5)的Tcl/Tk已经安装。
我的设置文件如下:
from cx_Freeze import setup, Executable
build_exe_options = {
"includes": [],
"packages": [],
'excludes' : ['collections.abc', 'urllib.sys'],
"include_files": []}

setup(
    name = "application",
    version = "0.1",
    description = "",
    author = "",
    options = {"build_exe": build_exe_options},
    executables = [Executable("applicaton.py")]
)

有人知道我该怎么做才能让它工作吗?提前感谢!

1个回答

0

我建议你在这里做几件事情(希望能解决我可以识别的两个问题):

  • 使用 Mac OS X 的系统 Python(不建议
  • 使用旧的和未维护的 cx_Freeze

首先让我们修复你的 Python 安装!推荐的方法是使用 Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew doctor
brew update
brew install python

现在你应该已经成功安装了 Python,它位于 /usr/local 目录下,与你的 Mac OS X 系统自带的 Python 分开,这样可以保持干净和独立。你还应该按照上面的安装说明进行操作。通常需要修改你的 $PATH
export PATH="/usr/local/bin:$PATH"

注意: 通常你应该修改你的$HOME/.bashrc或者$HOME/.profile,具体取决于你的终端配置。

现在你也可以使用/usr/local/bin/pip中的pip了。

接下来介绍一个更好的替代cx_freeze的工具——目前推荐且维护更好的方式是使用pyInstaller

pip install pyinstaller
pyinstaller -F /path/to/my/script.py

对于更复杂的需求和构建,请参照 pyinstaller 的文档 使用 spec 文件

祝你好运!

注意:这样做应该也会帮助解决你的 TCL/TK 问题!


我尝试使用您推荐的修复Python安装的方法,但是如果我使用brew install python,会出现错误消息,提示You must 'brew link gdbm' before python can be installed。因此,如果我尝试这个方法,会出现另一个消息,提示Could not symlink share/info/gdbm.info usr/local/share/info is not writable。然而,我仍然按照您的建议继续进行构建过程,并且使用pyInstaller工作了!感谢您的帮助。但是生成的文件是一个_Unit可执行文件_,所以我无法打开应用程序。您能告诉我出了什么问题吗? - Tenshi
是的,很可能你需要清理你的/usr/local目录,并确保你的本地用户对其具有写入权限。通常我会清空/usr/local的内容,并确保我有写入访问权限,这样就可以正常工作了 :) 除了Homebrew之外,通常没有什么东西会写入/usr/local - James Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接