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
확장의 예는 다음과 같습니다.
좋은 점은, 이것들은 다른 것과 마찬가지로 설치할 수 있다는 것입니다.pip
cpython과 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
'source' 카테고리의 다른 글
Nuxt 및 Vuex를 사용하여 getter와 액션을 찾을 수 없는 이유는 무엇입니까? (0) | 2022.10.26 |
---|---|
Java에서 null-return 메서드를 Scala 옵션과 함께 래핑하시겠습니까? (0) | 2022.10.26 |
Twig에서 null을 확인하는 방법 (0) | 2022.10.26 |
mapState 와 setter (0) | 2022.10.26 |
왜 ('b'+'a'+'a'+'a'+'a')의 결과가 Lower Case()의 '바나나'로 되어 있습니까? (0) | 2022.10.26 |