Package: setuptools-golang
setuptools-golangA setuptools extension for building cpython extensions written in golang.RequirementsThis requires golang >= 1.5.This requires python >= 3.7.  It is currently tested against python3 and pypy3.Platform SupportlinuxmacOSwin32 (32 bit cpython, 32 bit go 1.10+)UsageAddsetuptools-golangto thesetup_requiresin your setup.py andbuild_golang={'root': ...}.rootrefers to the root go import path of
your project.By default,setuptools-golangwill strip all binaries. This can be disabled
by adding'strip': Falsetobuild_golang. This will increase the size of
the extension, but the binaries contain debugging information and symbols.An extension must be a single file in themaingo package (though the entiremainpackage will be built into the extension).  That package may import
other code.
You may have multiple extensions in yoursetup.py.setup(...build_golang={'root':'github.com/user/project'},ext_modules=[Extension('example',['example.go'])],setup_requires=['setuptools-golang'],...)Writing cpython extensions in golangHere's someexamplesCommon issuesundefined reference to `some_c_function'Extensionby default will bring along the go files listed, but won't bring
along the related C files.  Add the following toMANIFEST.in:global-include *.c
global-include *.gofatal: could not read Username for 'https://github.com':You're probably trying to import from an external source which does not exist.
Double check that your import is correct.package github.com/a/b/c: /tmp/.../github.com/a/b exists but /tmp/.../github.com/a/b/.git does not - stale checkout?You've probably mistyped an import.  Double check that your import is correct.duplicate symbol _XXX in: _cgo_export.o mod.cgo2.oFor example:# github.com/asottile/dockerfile/pylib
duplicate symbol _PyDockerfile_GoParseError in:
    $WORK/github.com/asottile/dockerfile/pylib/_obj/_cgo_export.o
    $WORK/github.com/asottile/dockerfile/pylib/_obj/main.cgo2.oMake sure to mark global variables defined in C asextern.Here's an example PRrepeated rebuilds can be slowsetuptools-golang attempts to make builds more repeatable by using a separateGOPATH-- if you'd like to reuse a GOPATH you can set theSETUPTOOLS_GOLANG_GOPATHenvironment variable:$SETUPTOOLS_GOLANG_GOPATH=~/gopipinstall....Building manylinux wheelssetuptools-golangalso provides a tool for buildingPEP 513manylinux1 wheels so your
consumers don't need to have a go compiler installed to use your library.Simply runsetuptools-golang-build-manylinux-wheelsfrom your source
directory.  The resulting wheels will end up in./dist.$ setuptools-golang-build-manylinux-wheels

...

+ ls /dist -al
total 8092
drwxrwxr-x  2 1000 1000    4096 Feb  1 04:16 .
drwxr-xr-x 41 root root    4096 Feb  1 04:15 ..
-rw-r--r--  1 1000 1000 2063299 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp34-cp34m-manylinux1_x86_64.whl
-rw-r--r--  1 1000 1000 2064862 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp35-cp35m-manylinux1_x86_64.whl
-rw-r--r--  1 1000 1000 2064873 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp36-cp36m-manylinux1_x86_64.whl
-rw-rw-r--  1 1000 1000    4273 Feb  1 04:14 setuptools-golang-examples-0.1.1.tar.gz
*******************************************************************************
Your wheels have been built into ./dist
*******************************************************************************