setuptools-golang


Namesetuptools-golang JSON
Version 2.9.0 PyPI version JSON
download
home_pagehttps://github.com/asottile/setuptools-golang
SummaryA setuptools extension for building cpython extensions written in golang.
upload_time2023-07-29 20:05:32
maintainer
docs_urlNone
authorAnthony Sottile
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![build status](https://github.com/asottile/setuptools-golang/actions/workflows/main.yml/badge.svg)](https://github.com/asottile/setuptools-golang/actions/workflows/main.yml)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/asottile/setuptools-golang/main.svg)](https://results.pre-commit.ci/latest/github/asottile/setuptools-golang/main)

setuptools-golang
=================

A setuptools extension for building cpython extensions written in golang.

## Requirements

This requires golang >= 1.5.

This requires python >= 3.7.  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.

By default, `setuptools-golang` will strip all binaries. This can be disabled
by adding `'strip': False` to `build_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 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`.

```python
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](https://github.com/asottile/setuptools-golang-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](https://github.com/asottile/dockerfile/pull/8)

### repeated rebuilds can be slow

setuptools-golang attempts to make builds more repeatable by using a separate
`GOPATH` -- if you'd like to reuse a GOPATH you can set the
`SETUPTOOLS_GOLANG_GOPATH` environment variable:

```console
$ SETUPTOOLS_GOLANG_GOPATH=~/go pip install .
...
```

## Building manylinux wheels

`setuptools-golang` also provides a tool for building
[PEP 513](https://www.python.org/dev/peps/pep-0513/) 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
*******************************************************************************
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/asottile/setuptools-golang",
    "name": "setuptools-golang",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "",
    "author": "Anthony Sottile",
    "author_email": "asottile@umich.edu",
    "download_url": "https://files.pythonhosted.org/packages/83/60/aa914100664431d13f1480c630cf8cd8ea77d3d24022a58d45fa32de9e03/setuptools_golang-2.9.0.tar.gz",
    "platform": null,
    "description": "[![build status](https://github.com/asottile/setuptools-golang/actions/workflows/main.yml/badge.svg)](https://github.com/asottile/setuptools-golang/actions/workflows/main.yml)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/asottile/setuptools-golang/main.svg)](https://results.pre-commit.ci/latest/github/asottile/setuptools-golang/main)\n\nsetuptools-golang\n=================\n\nA setuptools extension for building cpython extensions written in golang.\n\n## Requirements\n\nThis requires golang >= 1.5.\n\nThis requires python >= 3.7.  It is currently tested against python3 and pypy3.\n\n## Platform Support\n\n- linux\n- macOS\n- win32 (32 bit cpython, 32 bit go 1.10+)\n\n## Usage\n\nAdd `setuptools-golang` to the `setup_requires` in your setup.py and\n`build_golang={'root': ...}`.  `root` refers to the root go import path of\nyour project.\n\nBy default, `setuptools-golang` will strip all binaries. This can be disabled\nby adding `'strip': False` to `build_golang`. This will increase the size of\nthe extension, but the binaries contain debugging information and symbols.\n\n\nAn extension must be a single file in the `main` go package (though the entire\n`main` package will be built into the extension).  That package may import\nother code.\nYou may have multiple extensions in your `setup.py`.\n\n```python\nsetup(\n    ...\n    build_golang={'root': 'github.com/user/project'},\n    ext_modules=[Extension('example', ['example.go'])],\n    setup_requires=['setuptools-golang'],\n    ...\n)\n```\n\n## Writing cpython extensions in golang\n\nHere's some [examples](https://github.com/asottile/setuptools-golang-examples)\n\n## Common issues\n\n### ```undefined reference to `some_c_function'```\n\n`Extension` by default will bring along the go files listed, but won't bring\nalong the related C files.  Add the following to `MANIFEST.in`:\n\n```\nglobal-include *.c\nglobal-include *.go\n```\n\n### `fatal: could not read Username for 'https://github.com':`\n\nYou're probably trying to import from an external source which does not exist.\nDouble check that your import is correct.\n\n\n### `package github.com/a/b/c: /tmp/.../github.com/a/b exists but /tmp/.../github.com/a/b/.git does not - stale checkout?`\n\nYou've probably mistyped an import.  Double check that your import is correct.\n\n### `duplicate symbol _XXX in: _cgo_export.o mod.cgo2.o`\n\nFor example:\n```\n# github.com/asottile/dockerfile/pylib\nduplicate symbol _PyDockerfile_GoParseError in:\n    $WORK/github.com/asottile/dockerfile/pylib/_obj/_cgo_export.o\n    $WORK/github.com/asottile/dockerfile/pylib/_obj/main.cgo2.o\n```\n\nMake sure to mark global variables defined in C as `extern`.\n[Here's an example PR](https://github.com/asottile/dockerfile/pull/8)\n\n### repeated rebuilds can be slow\n\nsetuptools-golang attempts to make builds more repeatable by using a separate\n`GOPATH` -- if you'd like to reuse a GOPATH you can set the\n`SETUPTOOLS_GOLANG_GOPATH` environment variable:\n\n```console\n$ SETUPTOOLS_GOLANG_GOPATH=~/go pip install .\n...\n```\n\n## Building manylinux wheels\n\n`setuptools-golang` also provides a tool for building\n[PEP 513](https://www.python.org/dev/peps/pep-0513/) manylinux1 wheels so your\nconsumers don't need to have a go compiler installed to use your library.\n\nSimply run `setuptools-golang-build-manylinux-wheels` from your source\ndirectory.  The resulting wheels will end up in `./dist`.\n\n```\n$ setuptools-golang-build-manylinux-wheels\n\n...\n\n+ ls /dist -al\ntotal 8092\ndrwxrwxr-x  2 1000 1000    4096 Feb  1 04:16 .\ndrwxr-xr-x 41 root root    4096 Feb  1 04:15 ..\n-rw-r--r--  1 1000 1000 2063299 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp34-cp34m-manylinux1_x86_64.whl\n-rw-r--r--  1 1000 1000 2064862 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp35-cp35m-manylinux1_x86_64.whl\n-rw-r--r--  1 1000 1000 2064873 Feb  1 04:16 setuptools_golang_examples-0.1.1-cp36-cp36m-manylinux1_x86_64.whl\n-rw-rw-r--  1 1000 1000    4273 Feb  1 04:14 setuptools-golang-examples-0.1.1.tar.gz\n*******************************************************************************\nYour wheels have been built into ./dist\n*******************************************************************************\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A setuptools extension for building cpython extensions written in golang.",
    "version": "2.9.0",
    "project_urls": {
        "Homepage": "https://github.com/asottile/setuptools-golang"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1db5cec02fe020136e92344fdb34718bdf673aa5446cff94440ced5159fce6fc",
                "md5": "da0718ad37b538348302097d3e04932b",
                "sha256": "97ccf706a7bb21d5a5b24ec4920af103df1558253243cbd8731d563d350b0f76"
            },
            "downloads": -1,
            "filename": "setuptools_golang-2.9.0-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "da0718ad37b538348302097d3e04932b",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.8",
            "size": 7232,
            "upload_time": "2023-07-29T20:05:30",
            "upload_time_iso_8601": "2023-07-29T20:05:30.982619Z",
            "url": "https://files.pythonhosted.org/packages/1d/b5/cec02fe020136e92344fdb34718bdf673aa5446cff94440ced5159fce6fc/setuptools_golang-2.9.0-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8360aa914100664431d13f1480c630cf8cd8ea77d3d24022a58d45fa32de9e03",
                "md5": "23e9318392df236707fd8b155e25e0ef",
                "sha256": "0f6996488ed254bba01e678eae1ff68fe20688785d8a42f0faad4361c316552b"
            },
            "downloads": -1,
            "filename": "setuptools_golang-2.9.0.tar.gz",
            "has_sig": false,
            "md5_digest": "23e9318392df236707fd8b155e25e0ef",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 6772,
            "upload_time": "2023-07-29T20:05:32",
            "upload_time_iso_8601": "2023-07-29T20:05:32.054533Z",
            "url": "https://files.pythonhosted.org/packages/83/60/aa914100664431d13f1480c630cf8cd8ea77d3d24022a58d45fa32de9e03/setuptools_golang-2.9.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-29 20:05:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "asottile",
    "github_project": "setuptools-golang",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "setuptools-golang"
}
        
Elapsed time: 0.15617s