A setuptools extension for building cpython extensions written in golang.
Project description
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 >= 3.6. It is currently tested against python3 and pypy3.
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 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file setuptools_golang-2.3.0.tar.gz.
File metadata
- Download URL: setuptools_golang-2.3.0.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
397396b77a45d7a70bcd681d7483fe6cf165a7c4587f6376a2fca9bab66d7dd3
|
|
| MD5 |
c0267458f5af3f7181e6dc09251ed13b
|
|
| BLAKE2b-256 |
7b81a56559619e2c03d08a77590a26b2317042168fb84e76afbd9830fd7271e1
|
File details
Details for the file setuptools_golang-2.3.0-py2.py3-none-any.whl.
File metadata
- Download URL: setuptools_golang-2.3.0-py2.py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43e119ecf3940659bf5c488f0239ca43930b6cee9bf1178cfd02fae72f6ccb6a
|
|
| MD5 |
02493426dad5cb3d16cdf494cf265958
|
|
| BLAKE2b-256 |
e997e34ab9cc2ca1437c1f22afe8d64cde8dc12cbc3091bb7fe7db29904e2585
|