用于构建用golang编写的cpython扩展的setuptools扩展。
项目描述
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
*******************************************************************************