PythonKit을 사용하여 Xcode 11에서 Python 모듈을 가져올 수 없습니다
나는 지금 Swift Package Manager를 사용하고 있다.
그것을 이용하여, 나는 스위프트 프로젝트에 파이썬킷을 가져왔다.
지금 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 라이브러리의 경로를 사용하여 PYTON_LIBRARY 환경 변수를 설정합니다.: 파일 /Users/herogold/Library/Developer/Xcode/Derived Data/VideoStream-cjytedddvktmyqlztmdbek/SourcePackages/CheckoutsourcePythonBrary.wift, 40-07-PythonKit/PythonKit/PythonKit/PythonKit/PythonBythonB. Python 라이브러리에 대한 경로를 사용하여 PYTON_LIBRARY 환경 변수를 설정합니다. 파일 /Users/herogold/Library/Developer/Xcode/Derived Data/VideoStream-cjytedddvktmyqlztmdbek/SourcePackagages/Checkouts/PythonKit/PythonLibrary, 40
첫 번째 SO 응답이므로 형식 지정 등을 용서하십시오. 나 자신도 잠시 동안 다른 오류들로 고통을 겪었지만, 일반적으로 같은 문제들로 고통을 받았다. 이를 통해 고려해야 할 몇 가지 리소스가 도움이 되기를 바랍니다:
<-- 이것은 iOS에서 실행하기 위해 모델링해야 하는 것입니다. 제 솔루션은 Mac Catalyst에서 작동합니다
2) -- 이 사람은 PythonKit을 구현하는 방법을 단계별로 살펴봅니다
제게 효과가 있었던 것은 다음과 같습니다:
1) 서명 및 기능에서 앱 샌드박스 사용 안 함:
앱 샌드박스의 오른쪽 상단 모서리에 서명 및 기능 아래에 "X"가 있습니다. 이를 클릭하여 앱 샌드박스를 제거하십시오
2) 서명 및 기능 아래의 "강화 런타임"에서 "라이브러리 유효성 검사 사용 안 함"을 선택합니다
지금, 나는 아직 이 조항들에 따라 앱 스토어에 앱을 제출하지 않았지만, 적어도 내 파이썬 파일과 라이브러리는 로드/빌드/실행한다!
업데이트 05/15/2020:
Mac Developer Distribution의 경우 Python Interpreter 및 bin 폴더와 함께 앱에 포함된 모든 .so 또는 .dylib에 서명해야 합니다. 나는 개발이 끝나면 각각의 스크립트를 실행하기 위해 빠른 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
}
이렇게 하면 서명 및 기능에서 앱 샌드박스와 모든 강화 런타임 옵션(라이브러리 유효성 검사를 비활성화하지 않는 경우)을 사용할 수 있습니다.
iOS에는 파이썬 인터프리터가 없습니다. 그것이 어떤 피톤킷 API도 이해할 수 없는 이유이다. 그래서 이것이 MacOS에서 작동하는 방식은 iOS에서 작동하지 않을 것이다. 파이썬킷은 동일한 이유로 iOS를 지원하지 않으며 동일한 이유로 테스트되지 않았다.
당신은 내 포크인 파이썬킷을 사용할 수 있다. 이 Swift 패키지는 당신의 앱에 Python을 포함한다.
예전에는 작동했지만 최근 MacOS 업데이트로 작동이 중단되었고 애플리케이션의 보안 설정을 완화한 위의 솔루션은 작동하지 않았습니다. 응용 프로그램에 파이썬 라이브러리를 추가하는 것만으로 해결했다. 다음을 수행할 수 있습니다:
빌드 단계 단계를 추가하여 파이썬 라이브러리(내 경우 libpython 3.8.dylib이지만 전체 폴더를 복사했습니다)를 애플리케이션 리소스에 복사합니다. 컨텐츠/리소스/파이톤에 복사했습니다. 서명해야 할 수도 있습니다.
PythonKit에 대한 첫 번째 호출 전에 라이브러리를 가리키도록 환경 변수를 설정합니다
let bundlePath = Bundle.main.bundlePath let python_lib_path = "\(bundlePath)/Contents/Resources/Python/libpython3.8.dylib" setenv("PYTHON_LIBRARY", python_lib_path, 0)
이 접근 방식의 장점은 사용자가 직접 배포할 때 최종 사용자 시스템에 설치된 Python에 의존하지 않는다는 것입니다.
'개발하자' 카테고리의 다른 글
Svelte: 구성 요소에서 본문에 스크롤 클래스 이름을 추가하지 않음 (0) | 2023.02.06 |
---|---|
Swift 및 Pythonkit에서 Python 모듈 사용 (0) | 2023.02.06 |
Flot Nosuch 메서드 오류를 수정하는 방법은 무엇입니까? (0) | 2023.02.05 |
디스크에서 파일이 변경될 때 주피터 노트북을 자동으로 다시 로드하는 중 (0) | 2023.02.04 |
Kubernetes에서 기본 네임스페이스를 설정할 수 있습니까? (0) | 2023.02.04 |