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

setuptools-golang的Python项目详细描述


Build StatusBuild statusCoverage Status

设置工具golang

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

要求

这需要golang>;=1.5。目前测试的是1.10和1.11。

这需要python>;=2.7。目前它是根据2.7,3.6,3.7, 还有派比。

平台支架

  • Linux
  • MacOS
  • win32(32位cpython,32位go 1.10+)

用法

在setup.py和 build_golang={'root': ...}root是指 你的项目。

扩展名必须是maingo包中的单个文件(尽管整个 main包将内置到扩展中)。那个包裹可能会进口 其他代码。 您的setup.py中可能有多个扩展名。

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

在golang中编写cpython扩展

这是一些examples

常见问题

undefined reference to `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?

您可能输入了错误的导入。仔细检查您的输入是否正确。

duplicate symbol _XXX in: _cgo_export.o mod.cgo2.o

例如:

# 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中定义的全局变量标记为externHere's an example PR

制造Manylinux车轮

setuptools-golang也为构建 PEP 513Manylinux1车轮 用户不需要安装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 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
*******************************************************************************

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
DIIOP_IOR中的java端口0。TXT,我如何更改它?   hadoop面临的问题:java。lang.NoClassDefFoundError:org/bouncycastle/jcajce/JcaJceHelper在使用更新的BC jar时   java将大科学数转换为长科学数   Java8文件流,如何控制文件的关闭?   是否有类似于dotnetshoutout的资源。com&dotnetkicks。Java世界中的com?   java返回类型void/方法替代方案?   如何使用java。lang.NullPointerException:void 安卓。支持v7。应用程序。ActionBar。setElevation(float)“”在空对象引用上'   java使用kafka流获取时间窗口中给定密钥的最后一个事件   java多边形旋转不正确   java我们应该在params中编写什么。jpbc的属性文件   java如何计算线程数?   使用jar时发生java错误,但不在库本身中   java优先级列表排队方法错误   java和org之间的区别。莫基托。莫基托。任何和组织。莫基托。媒人。任何