让 Python 在 Cocoa App 中工作

     2023-03-08     187

关键词:

【中文标题】让 Python 在 Cocoa App 中工作【英文标题】:Getting Python to work in Cocoa App 【发布时间】:2014-02-07 09:48:37 【问题描述】:

我目前正在尝试让 Python 在 Cocoa 应用程序中工作。我的第一步是包含 Python,以便 Xcode 可以链接它。由于 OS X Mavericks,Python.framework 不再在 SDK 中,所以我按照this 的说明让它工作。创建一个项目并按照描述的步骤操作,Xcode 给我一个错误消息:

CpResource libpython2.7.dylib /Users/Phil/Library/Developer/Xcode/DerivedData/Python_Scripting-hiipjmacxsirqkfqczdjdaxbqgfj/Build/Products/Debug/Python\ Scripting.app/Contents/Resources/libpython2.7.dylib

cd "/Users/Phil/Documents/Xcode/Python Scripting"

builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks /Users/Phil/Documents/Xcode/Python\ Scripting/libpython2.7.dylib /Users/Phil/Library/Developer/Xcode/DerivedData/Python_Scripting-hiipjmacxsirqkfqczdjdaxbqgfj/Build/Products/Debug/Python\ Scripting.app/Contents/Resources

错误:/Users/Phil/Documents/Xcode/Python Scripting/../../../Python:没有这样的文件或目录

我很确定我正确地遵循了说明(例如,Py_IsInitialized() 被识别)。但是:声明Confirm the dialog box, and now Xcode is set to link against libpython2.7.dylib (by using the same -L and -l option settings as above). 是什么意思?我必须手动设置一些链接器标志吗?

【问题讨论】:

【参考方案1】:

当您将系统 libpython2.7.dylib 拖到您的项目中时,请确保未选中“复制项目...”复选框。您希望该库仅被引用,而不是复制到您的项目中。

您粘贴的 CpResource 命令使我确信 Xcode 正在尝试将文件从您的项目(不存在)复制到您的 .app 资源中。你也不想这样。如果 dylib 文件位于 Copy Bundle Resources 下的目标的 Build Phases 中,则应将其删除。 (你可以搜索 CpResource,你会发现有类似问题的人)。

值得一提的是,Apple 建议在嵌入脚本语言时不要依赖系统安装的版本,而是捆绑您自己的版本。这样一来,您就不会受到 Apple 过时的版本的影响,或者他们的版本后来被更改或从系统中删除。

编辑:

如果您想捆绑自己的 Python 版本,这是我为我的一个应用程序所做的(我使用的是 3.3 版):

从源代码下载并编译 Python。我建议静态编译它(它可能默认设置为这样做)。 复制静态库(.a 文件)、python3.3 库文件夹,并包含吐出到我的 Xcode 项目中的文件。 确认我的目标有一个构建阶段,将 python3.3 库文件夹从我的项目复制到我的 .app 中 在运行时初始化 Python 之前,将环境变量 PYTHONHOME 和 PYTHONPATH 设置到我的 .app 内的 python3.3 目录(使用 NSBundle 检索的路径) #include "Python.h" 并调用 Py_Initialize() 将 python3.3/lib-dynload/ 目录的路径(在我的 .app 中)附加到 Python 的 sys.path 变量中,以便可以导入其中的 C 编译模块

它应该可以工作。

可选:

您可能不想在您的应用中包含超过 100 MB 的 Python 数据。我使用此命令将所有标准库 .py 源文件就地转换为 .pyc 字节码文件:

path/to/built/python -m compileall path/to/python3.3/ -b

(-b 在 2.x 中可能不需要/不相关)

然后我继续删除 __pycache__,以及我知道我不需要的任何包/模块(例如 tkinter、antigravity 等)。我将捆绑的 python 文件的大小增加到 20 MB 左右(压缩时为 7 MB)

【讨论】:

谢谢,我尽量不复制,我确实做到了。我确实安装了自己的 Python,但是如何将它制作成一个包以在 Xcode 中使用? 我以为你指的是系统版本,所以我说不要将它复制到你的项目中。我编辑了我的帖子来解释如何捆绑你自己的版本。 是的,我指的是那个。对不起,混乱。我只是对如何更进一步并包含自定义 python 感兴趣。 Mac下如何将Python编译为静态库? @Alerty 只是一个标准的 ./configure --prefix=path;制作;进行安装。 Python 3.x 默认会吐出一个静态库。

无法让 Firestore 快速入门在 Python 中工作

】无法让Firestore快速入门在Python中工作【英文标题】:CannotgetFirestoreQuickstarttoworkinPython【发布时间】:2019-04-0720:33:28【问题描述】:我在Python中关注了quickstartguide的Firestore,但由于收到以下错误消息,我无法让它运行:grpc._channe... 查看详情

让请求在 curl 中工作,但不在 Python 中

】让请求在curl中工作,但不在Python中【英文标题】:Putrequestworkingincurl,butnotinPython【发布时间】:2018-06-0405:38:30【问题描述】:我正在尝试使用curl制作一个“放置”方法,一切正常,我得到了JSON:curl-XPUT-d\'["foo":"more_foo"]\'http://... 查看详情

无法让二级路线在快递中工作

】无法让二级路线在快递中工作【英文标题】:Can\'tgetsecondlevelroutesworkinginexpress【发布时间】:2015-11-0616:50:31【问题描述】:很抱歉,我对node很陌生。我已经坚持了几个小时了。server.jsapp.use(express.static(__dirname+"/public"));app.get(\'/... 查看详情

不能让 id 在 Python 中工作! Kivy 新手需要帮助

】不能让id在Python中工作!Kivy新手需要帮助【英文标题】:Can\'tmakeidsworkinPython!HelpneededforKivynewbie【发布时间】:2021-01-1221:35:57【问题描述】:我知道你会认为我是一个绝对的新手——你是对的!!也许你们中的一些人会那么好... 查看详情

无法让 subl 命令在 OSX 终端中工作 [重复]

】无法让subl命令在OSX终端中工作[重复]【英文标题】:Can\'tgetsublcommandtoworkinOSXterminal[duplicate]【发布时间】:2016-06-2600:28:30【问题描述】:我正在尝试让sublcomand用于sublimetext3在终端命令行上工作,但在尝试了一些事情之后我无法... 查看详情

让 Nativescript Telerik UI RadListView 在 Angular 中工作

】让NativescriptTelerikUIRadListView在Angular中工作【英文标题】:GettingNativescriptTelerikUIRadListViewtoworkinAngular【发布时间】:2017-06-2210:49:17【问题描述】:TNSv2.5.0我已将LISTVIEW_DIRECTIVES导入到我的app.module中,我的模板看起来像<ActionBartit... 查看详情

有没有一种简单的方法可以让 unicode 在 python 中工作?

】有没有一种简单的方法可以让unicode在python中工作?【英文标题】:Isthereaneasywaytomakeunicodeworkinpython?【发布时间】:2012-09-1510:18:07【问题描述】:我正在尝试处理python2.7.2中的unicode。我知道有.encode(\'utf-8\')的东西,但是当我添... 查看详情

让spool在windows中工作,以便python方法可以像单个可执行文件一样运行

Ihadhearaboutamethodtorunamethodlikeanexecutable,withtheargumentsbeingpassedinfromthecommandline.Apparently,RubyhasthiswiththeRakeproject.Well,Pythonhasitwith[Shovel](http://devblog.seomoz.org/2012/03 查看详情

如何让静态文件在我的 Django 项目中工作?

...oject?【发布时间】:2019-05-2803:48:20【问题描述】:使用:Python3.7和Django2.1.4我正在学习WilliamS.Vincent的DjangoforBeginners书中的教程。我在这本书的“博客应用程序”部分,我一直在遵循他的指示。但是,无论我做什么,我似乎都无 查看详情

似乎无法让蓝牙代理在 Raspberry Pi 中工作

...2021-12-0506:45:15【问题描述】:所以,我要做的是创建一个Python脚本,它允许我通过蓝牙将安卓手机与树莓派连接起来​​。如果我手动执行此操作(在命令行中编写指令),它工作得很好,我可以搜索、配对和连接范围内的任何... 查看详情

如何让 QThreads 在控制台 PySide 程序中工作?

...】:2012-04-0613:32:09【问题描述】:我正在尝试学习如何在python程序中使用线程。我正在使用PySide和QThreads,因为之后我将使用PySide实现gui。至少我认为我已经理解了线程的主要概念。但我仍然对事件循环感到困惑。我认为这是我... 查看详情

如何让 pydoc 命令在 Windows 7 cmd 中工作?

...间】:2011-08-1109:17:19【问题描述】:我正在通过“LearningPythontheHardWay”学习Python编程。在其中一章中,它告诉我使用pydoc命令。Windows7cmd使用该命令惨遭失败。当我在cmd上输入pydocraw_input()时,会生 查看详情

如何让别名在所有 shell 中工作?

】如何让别名在所有shell中工作?【英文标题】:HowdoImakealiasesworkacrossalltheshells?【发布时间】:2014-04-1916:37:10【问题描述】:我一直在尝试让别名在bashshell中工作。现在,假设我愿意别名yum=\'yum-v\'在我的shell中。当我从CLI运行命... 查看详情

无法让悬停导航在 IE8/9 中工作,在 FF/Chrome 中工作

】无法让悬停导航在IE8/9中工作,在FF/Chrome中工作【英文标题】:CannotgethovernavigationworkinginIE8/9,worksinFF/Chrome【发布时间】:2011-07-0213:22:07【问题描述】:我正在努力让我的摄影作品集网站在所有主要浏览器(IE8、FF、Chrome)上都... 查看详情

在 python 3 和 2 中工作的 Unicode 文字

】在python3和2中工作的Unicode文字【英文标题】:Unicodeliteralsthatworkinpython3and2【发布时间】:2011-10-0107:58:16【问题描述】:所以我有一个python脚本,为了方便起见,我更喜欢在python3.2和2.7上工作。有没有办法让unicode文字同时适用... 查看详情

java示例代码_让搜索在安卓系统中工作

java示例代码_让搜索在安卓系统中工作 查看详情

无法让 DLookup 函数在 Access 2013 中工作

】无法让DLookup函数在Access2013中工作【英文标题】:CannotGetDLookupFunctiontoworkinAccess2013【发布时间】:2016-11-0607:59:23【问题描述】:我正在尝试让Dlookup功能在Access2013中工作,但我无法让它工作,这是我目前所拥有的:-我有一个名... 查看详情

如何让某些 pygame 模块在 VSC 中工作?,其他修复不起作用

...3-0702:43:28【问题描述】:我现在遇到了麻烦,使用最新的python和vsCode。对于我正在使用的不同pygame功能,我不断收到“模块pygame没有空白成员Pylintno-member”。K_a、K 查看详情