Skip to main content

A setuptools extension for building cpython extensions written in golang.

Project description

Build Status Build status Coverage Status

setuptools-golang

A setuptools extension for building cpython extensions written in golang.

Requirements

This requires golang >= 1.5. It is currently tested against 1.10 and 1.11.

This requires python >= 2.7. It is currently tested against 2.7, 3.6, 3.7, and pypy.

Platform Support

  • linux
  • macos
  • win32 (32 bit cpython, 32 bit go 1.10+)

Usage

Add setuptools-golang to the setup_requires in your setup.py and build_golang={'root': ...}. root refers to the root go import path of your project.

An extension must be a single file in the main go package (though the entire main package will be built into the extension). That package may import other code. You may have multiple extensions in your setup.py.

setup(
    ...
    build_golang={'root': 'github.com/user/project'},
    ext_modules=[Extension('example', ['example.go'])],
    setup_requires=['setuptools-golang'],
    ...
)

Writing cpython extensions in golang

Here's some examples

Common issues

undefined reference to `some_c_function'

Extension by default will bring along the go files listed, but won't bring along the related C files. Add the following to MANIFEST.in:

global-include *.c
global-include *.go

fatal: 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.o

For 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.o

Make sure to mark global variables defined in C as extern. Here's an example PR

Building manylinux wheels

setuptools-golang also provides a tool for building PEP 513 manylinux1 wheels so your consumers don't need to have a go compiler installed to use your library.

Simply run setuptools-golang-build-manylinux-wheels from 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 2065095 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp27-cp27mu-manylinux1_x86_64.whl
-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
*******************************************************************************

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

setuptools_golang-1.6.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

setuptools_golang-1.6.0-py2.py3-none-any.whl (6.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file setuptools_golang-1.6.0.tar.gz.

File metadata

  • Download URL: setuptools_golang-1.6.0.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for setuptools_golang-1.6.0.tar.gz
Algorithm Hash digest
SHA256 4629e2c1d1999b95ee8d561c79a148011e3cc2312f17ebb97088a1e5df012207
MD5 67a11150ac24d3a4dc92b9907429d28f
BLAKE2b-256 b3ddad309480746910f2b60d627267886d45dc894048a76f60219134d4b0725e

See more details on using hashes here.

Provenance

File details

Details for the file setuptools_golang-1.6.0-py2.py3-none-any.whl.

File metadata

  • Download URL: setuptools_golang-1.6.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for setuptools_golang-1.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d9e65b5fed79ce04a29a782a2c193ebb0cf797f2ed2a3e3cd7fc4c8b557ecc4a
MD5 2cd1d8c5e2b8e7c0d2594e11034e63aa
BLAKE2b-256 e9c75c9202ea768da09c8c91c7b3f2b977d7d6bf1fb9ca490d1f5e8a0946d71b

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page