跳转到主要内容

用于构建用golang编写的cpython扩展的setuptools扩展。

项目描述

build status pre-commit.ci status

setuptools-golang

用于构建用golang编写的cpython扩展的setuptools扩展。

要求

此要求golang >= 1.5。

此要求python >= 3.7。目前正在对python3和pypy3进行测试。

平台支持

  • linux
  • macOS
  • win32(32位cpython,32位go 1.10+)

用法

setuptools-golang添加到您的setup.py中的setup_requires,并添加build_golang={'root': ...}root指的是您项目的主go导入路径。

默认情况下,setuptools-golang将删除所有二进制文件。这可以通过向build_golang添加'strip': False来禁用。这将增加扩展的大小,但二进制文件包含调试信息和符号。

扩展必须是main go包中的单个文件(尽管整个main包将被构建到扩展中)。该包可以导入其他代码。您可以在setup.py中拥有多个扩展。

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

用golang编写cpython扩展

以下是一些示例

常见问题

对`some_c_function`的未定义引用

Extension默认会附带列出的go文件,但不会附带相关的C文件。将以下内容添加到MANIFEST.in

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

fatal: could not read Username for 'https://github.com'

您可能正在尝试从外部源导入,该源不存在。请确保您的导入是正确的。

package github.com/a/b/c: /tmp/.../github.com/a/b exists but /tmp/.../github.com/a/b/.git does not - stale checkout?

你可能输入了错误的导入语句。请再次检查你的导入语句是否正确。

在:_cgo_export.o mod.cgo2.o 中重复符号 _XXX

例如

# 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

确保将定义在 C 中的全局变量标记为 extern这里是一个示例 PR

重复重建可能会很慢

setuptools-golang 尝试通过使用单独的 GOPATH 来使构建更可重复 -- 如果你想重用 GOPATH,你可以设置 SETUPTOOLS_GOLANG_GOPATH 环境变量

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

构建 manylinux 轮子

setuptools-golang 还提供了一个用于构建 PEP 513 manylinux1 轮子的工具,这样你的用户就不需要安装 go 编译器即可使用你的库。

只需从你的源目录中运行 setuptools-golang-build-manylinux-wheels。生成的轮子将位于 ./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
*******************************************************************************

项目详情


下载文件

下载适合你平台的文件。如果你不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

setuptools_golang-2.9.0.tar.gz (6.8 kB 查看哈希)

上传时间

构建分布

setuptools_golang-2.9.0-py2.py3-none-any.whl (7.2 kB 查看哈希)

上传时间 Python 2 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面