【发布时间】:2016-07-04 15:21:11
【问题描述】:
我正在尝试按照this answer(扩展this article)中的说明在Mac 上的Objective C Cocoa 应用程序中嵌入Python 3 解释器,并手动构建Python 和PyObjC。
我希望能够将 Python 代码作为插件运行。我特别不想依赖库存的 Apple Python (v2.7)。我有大部分工作,但似乎无法可靠地加载插件脚本。看起来嵌入式 Python 解释器无法创建 __pycache__/*.pyc 文件。这可能是一个症状,也可能是一个原因。如果我从 Python3 REPL(通过 import 或 imp 或 importlib 模块)手动导入插件文件,则会生成 .pyc 并正确加载插件。如果我不手动执行此操作,则不会创建 .pyc,我会收到 ValueError "Unmarshallable object"。
我尝试放松对脚本目录的权限,但无济于事。无论是从 REPL 还是从保镖脚本中,cache_tag 看起来都不错:
>>> sys.implementation.cache_tag
'cpython-35'
如果我尝试手动编译插件文件,py_compile 会引发 Cocoa 异常(我仍在深入研究)。
我正在使用以下内容:
- OS X 10.11.5 (El Capitan)
- XCode 7.2.1
- Python v3.5.2
- PyObjC v3.11
我必须对链接的 SO 答案中概述的过程进行一些必要的调整:
编译 Python 3 需要 OpenSSL 和 zlib 的 Homebrew 版本,以及适当的 LDFLAGS 和 CPPFLAGS:
export CPPFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix zlib)/include"
export LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix zlib)/lib"
在配置 Python 进行构建时,我还确保 pip 安装正常:
./configure --prefix="/path/to/python/devbuild/python3.5.2" --with-ensurepip=install
原始文章来源的一个分支(使用股票 Python2)可以正常工作here,所以我怀疑我并没有离题太远。知道我错过了什么吗?我是否需要对嵌入式 Python 进行签名或以其他方式授予权限?是否有我忽略设置的编译/配置选项?
TIA
【问题讨论】:
标签: objective-c pyobjc