我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块
Posted
技术标签:
【中文标题】我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块【英文标题】:I can't import Python modules in Xcode 11 using PythonKit 【发布时间】:2019-07-20 15:57:54 【问题描述】:我现在正在使用 Swift 包管理器。
使用它,我将 PythonKit 导入到我的 Swift 项目中。
我现在无法使用 PythonKit 导入 Python 模块。
它要求我设置 PYTHON_LIBRARY 路径,但我不知道该怎么做。
谁能帮帮我?
//
// ViewController.swift
// VideoStream
//
// Created by HeRo Gold on 7/20/19.
// Copyright © 2019 TopAce. All rights reserved.
//
import UIKit
import PythonKit
let sys = Python.import("sys")
class ViewController: UIViewController
@IBOutlet weak var netflixView: WKWebView!
let netflixURL = URL(string: "https://www.netflix.com/login")
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
let pymsl = try Python.import(name: "pymsl")
print("Python \(sys.version_info.major).\(sys.version_info.minor)")
print("Python Version: \(sys.version)")
print("Python Encoding: \(sys.getdefaultencoding().upper())")
这是我在 iPhone 上运行 ios 应用程序时出现的错误消息
致命错误:未找到 Python 库。使用 Python 库的路径设置 PYTHON_LIBRARY 环境变量。:文件 /Users/herogold/Library/Developer/Xcode/DerivedData/VideoStream-cjytedddvtktmybclqlztmfdbekk/SourcePackages/checkouts/PythonKit/PythonKit/PythonLibrary.swift,第 40 行 2019-07-20 23:55:00.967869+0800 VideoStream[31841:170718] 致命错误:找不到 Python 库。使用 Python 库的路径设置 PYTHON_LIBRARY 环境变量。:文件 /Users/herogold/Library/Developer/Xcode/DerivedData/VideoStream-cjytedddvtktmybclqlztmfdbekk/SourcePackages/checkouts/PythonKit/PythonKit/PythonLibrary.swift,第 40 行
【问题讨论】:
解决了吗?我遇到了同样的问题。我猜你正试图在 xcode 的 Single-view App 中使用它。 【参考方案1】:第一个 SO 答案,所以请原谅格式化 / 等。我自己经历了一段时间,有不同的错误,但通常是相同的问题。我希望这对您有所帮助——需要考虑的一些资源:
1) Pyto -- 适用于 iOS/Catalyst 的完全嵌入式 Python 环境;使用 LXML 和 Python 库移植说明 (预装 Python 的 Mac)
2) Python Kit Tutorial -- 这家伙一步一步的经历了如何实现PythonKit
这对我有用:
1) 在 Signing and Capabilities 中禁用 App Sandbox:
In top right corner of App Sandbox, under Signing & Capabilities there is an "X", click that to remove App Sandbox
2) 在 Signing and Capabilities 下的“Hardened Runtime”中:勾选“Disable Library Validation”
Image of checkbox for Disable Library Validation
现在,我还没有根据这些规定向 App Store 提交应用程序,但至少我的 python 文件和库加载/构建/运行!
2020 年 5 月 15 日更新:
对于 Mac 开发者分发版,您必须对应用中包含的所有 .so 或 .dylib 以及 Python Interpreter 和 bin 文件夹进行签名。使用 dev 完成后,我制作了一个快速 bash 脚本来运行每个脚本。
function signThese()
find . -name "*.$1" | while read line; do
codesign --force --verbose=4 --options=runtime --timestamp --sign "Developer ID Application: [INSERT YOUR CERT HERE]" $line
done
这将允许您在签名和功能中使用 AppSandbox,以及所有强化运行时选项(如不禁用库验证)。
【讨论】:
它们在 iOS 模拟器和 iOS 设备上加载、构建和运行? 在撰写本文时(7 月 30 日),Pyto 在 iOS 模拟器和 iOS 设备上构建并运行——随着新的 Xcode 更新,我想有些东西坏了,虽然还没有检查。 谢谢,勾选“禁用库验证”解决了我的问题 @CMill4 你能告诉我如何使用这个 bash 脚本,因为我被困在应用程序分发中。【参考方案2】:iOS 没有 python 解释器。这就是它无法理解任何 pyhtonkit api 的原因。所以这适用于 MacOS 的方式不适用于 iOS。 出于同样的原因,Pythonkit 不支持 iOS,并且没有经过同样的测试。
【讨论】:
【参考方案3】:你可以使用我的 PythonKit 分支。 https://github.com/kewlbear/PythonKit 这个 Swift 包将 Python 嵌入到您的应用程序中。
【讨论】:
我在 iOS 中使用你的包,它可以在调试版本中工作,而不是像 TestFlight 那样在发布中工作。创建 PythonObject 时崩溃以上是关于我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块的主要内容,如果未能解决你的问题,请参考以下文章
ipatool无法使用bitcode构建(xcode 7.1.1)