source

Go(Golang)에서 Python 확장자 쓰기

manycodes 2022. 10. 26. 21:11
반응형

Go(Golang)에서 Python 확장자 쓰기

현재 Cython을 사용하여 C와 Python을 링크하여 Python 코드의 느린 비트로 속도를 높이고 있습니다.단, goroutine을 사용하여 매우 느린(그리고 매우 병렬 가능한) 코드를 구현하고 싶지만 python에서 호출할 수 있어야 합니다.(이 질문은 이미 보았습니다)

필요에 따라 C(또는 Cython)를 경유하여 데이터 구조 등을 셋업할 수도 있지만, 버그 수정/회피 관점에서 이 추가 레이어를 피하는 것이 좋습니다.

바퀴를 재창조하지 않고 이를 수행할 수 있는 가장 간단한 방법은 무엇일까요?

업데이트 2015: Go 1.5부터 가능 https://blog.filippo.io/building-python-modules-with-go-1-5/

Go 1.5에서는 .so 객체를 빌드하고 Python 모듈로 Import할 수 있으며 Python에서 직접 Go code를 실행할 수 있습니다.

https://github.com/go-python/gopy 도 참조해 주세요.

gopy는 go 패키지에서 CPython 확장 모듈을 생성합니다.

유감스럽게도, 이것은 현재 가능하지 않습니다.Go는 C 코드를 실행할 수 있지만(그리고 이 C 코드는 Go로 다시 호출할 수 있습니다), 함수는 Go에 있어야 합니다.그래서 Go 실행 시 설정이 가능합니다.

go와 인터페이스하는 cpython 확장자를 쓸 수 있는 setuptools 확장자를 작성했습니다.https://github.com/asottile/setuptools-golang

확장의 예는 다음과 같습니다.

좋은 점은, 이것들은 다른 것과 마찬가지로 설치할 수 있다는 것입니다.pipcpython과 pypy를 모두 포장하여 지지합니다.

또한 PEP 513 manylinux1 휠을 구축하여 프리빌트된 휠을setuptools-golang-build-manylinux-wheels도구.

이 접근방식은 @ColonelPanic의 답변과 거의 동일하지만 python2 + python3 호환성을 실현하기 위해 몇 가지 추가 트릭을 사용합니다.

Go에서 Python 확장자를 쓰는 데 도움이 되는 Go-python 패키지가 있습니다.

이 패키지는 실행 가능한 "go-module"을 제공합니다.이 패키지는 "go-model"을 로드한 후 python을 호출합니다.Py_Main(os).Args). 이러한 실행 가능 파일에서는 C-Python에 대한 기반 확장을 구현하는 것이 더 쉽습니다(이는 일반적으로 다소 복잡한 함수 홉을 통해 C에서 호출하는 것을 의미하기 때문입니다).

언급URL : https://stackoverflow.com/questions/12443203/writing-a-python-extension-in-go-golang

반응형