我正在使用Xcode 4.6.2构建一个PyObjC应用程序,并试图弄清楚如何将Python框架与我的应用程序捆绑在一起,以便我可以在不依赖具有特定Python版本的主机系统的情况下引用它。 / p>
(我之前曾问过this问题,但从那以后,我决定嵌入框架是更好的方法。)
我知道这是人们所做的事情 - 根据我的经验,大多数独立的Python应用程序都在其中打包Python安装。但我无法弄清楚如何让它为我工作。
我已经使用Build Phases“Copy Files”面板将Python.framework复制到我的项目中,并且Python.framework 显示在我的应用程序包中,但我无法弄清楚如何让应用程序引用它。
如果我链接到Xcode中的“链接框架和库”中的Python.framework,应用程序构建正常,但在10.6上启动时失败并显示错误
Dyld Error Message:
Library not loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python
Referenced from: {/path/to/my/app}
Reason: image not found
...因为10.6只有Python 2.5,它正在搜索系统框架,而不是我的应用包中包含的系统框架。
如果我没有链接到Xcode中的Python框架,则应用程序无法构建。
那么如何告诉我的应用程序我希望它使用appname.app/Contents/Frameworks/Python.framework
中我的应用程序中捆绑的Python.framework,而不是位于/System/Library/Frameworks/Python.framework
的系统Python.framework?
我对这个问题有点陷入困境,任何帮助都会受到高度赞赏。
答案 0 :(得分:3)
不要尝试将/System/Library/Framework/Python.framework复制到您的应用程序包中,这几乎肯定不会达到您想要的效果(该应用程序不适用于较旧的OSX版本,而不是在相同或更新的OSX版本上是必要的,并且是狡猾的许可证。
要使用框架,您需要重写load命令,方法是使用install_name_tool,或者创建一个已经具有正确安装名称值的自定义python框架(类似于@executable_path /../../ Framework /Python.framework/Python。
我通常使用py2app来创建应用程序包(并不奇怪,因为我是py2app的维护者),它将自动包含所需的Python依赖项。