Macos cx_冻结Mac构建已停止在_cTypesfor Homebrew和Python
我们使用cx_Freeze在Mac OS下生成python应用程序的独立二进制构建。构建在构建机器(安装了自制和Python)下运行良好,但在客户端机器上失败,并显示以下错误消息Macos cx_冻结Mac构建已停止在_cTypesfor Homebrew和Python,macos,python-2.7,homebrew,cx-freeze,Macos,Python 2.7,Homebrew,Cx Freeze,我们使用cx_Freeze在Mac OS下生成python应用程序的独立二进制构建。构建在构建机器(安装了自制和Python)下运行良好,但在客户端机器上失败,并显示以下错误消息 Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/__startup__.py", line 14, in run module.run() Fi
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/__startup__.py", line 14, in run
module.run()
File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/Console.py", line 26, in run
exec(code, m.__dict__)
File "./utest2.py", line 15, in <module>
from ttLib import *
File "ttLib.py", line 848, in init ttLib
import ctypes
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ImportError: dlopen(/Users/gff/src/TextSeek_test/build/test_build/lib/_ctypes.so, 2): Symbol not found: __PySlice_AdjustIndices
Referenced from: /Users/gff/src/TextSeek_test/build/test_build/lib/_ctypes.so
Expected in: flat namespace
in /Users/gff/src/TextSeek_test/build/test_build/lib/_ctypes.so
lib
子目录中的所有动态库(.so
,.dylib
,…?)复制到生成目录本身。还将build目录中的所有动态库复制到其lib
子目录中。这能解决问题吗?在构建机器上,当然应该使用与运行未冻结的应用程序相同的python版本来生成冻结的应用程序build\u exe
的include\u files
列表,让cx\u Freeze
在构建步骤中自动包含动态库。您可以使用元组(源,目标)
作为包含\u文件列表中的项,让cx\u冻结
将文件从源
复制到特定的目标
到生成目录中
cx\u Freeze
错误地包含在lib
子目录中,反之亦然。在生成计算机上,这通常不是问题,因为库的副本通常在系统路径中找到,但在客户端计算机上,通常在系统路径上找不到库的副本,或者是不兼容的副本
顺便说一下,
build\u exe
选项“include\u msvcr”:True
在cx\u Freeze
5.1.1中似乎不起作用,请参见。我自己找到了解决方案
此问题是由错误链接的动态库文件引起的。我们使用“otool-L”找到依赖项,并将它们逐个与“安装\u名称\u工具-change”重新链接。程序终于运行了。您使用的是哪个版本的cx\U Freeze?Mac High Sierra中的5.1.1版本。我自己找到了解决方案。此问题是由错误链接的动态库文件引起的。我们使用otool通过install_name_工具逐个查找依赖项和链接。程序终于成功了。听起来很棒。请将解决方案的描述添加为问题的答案,并将此答案标记为已接受。发件人:若要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色切换为已填写。谢谢。但这个问题确实是由MacOS特定的原因造成的。我的Windows版本已通过,没有问题。我已经调查了一些关于错误链接的动态文件的线索,并使用install_name_工具来修复它们。但现在仍有新的部署问题需要解决。
build_exe_options = {
"packages": ["wcwidth", "watchdog", "xlrd", "jinja2", "subprocess"],
"excludes": [ "AppKit", "Carbon", "CoreFoundation", "Finder", "Foundation", "FSEvents", "objc"],
"include_msvcr": True,
"zip_include_packages":["winshell", "wcwidth", "watchdog", "pyhk", "xlrd", "jinja2",\
"argh", "ctypes", "email", "encodings" ]
}
exeList = [Executable( "utest2.py", base = None, targetName= "utest") ]
setup( name = "XXX",
description = u"XXX desc",
options = {
"build_exe": build_exe_options,
'bdist_mac': {
'bundle_name': "XXX",
}
},
executables = exeList)