当前位置: 首页 > 知识库问答 >
问题:

从C代码构建Python模块失败

苏培
2023-03-14

我正在阅读这个关于如何绑定Python和C的教程。我正在使用Python v3.7.1,所以我不得不使用新的Python接口(与示例不同),所以现在我有:

加法器。c

#include <Python.h>

static PyObject *addList_add(PyObject *self, PyObject *args)
{
    PyObject *listObj;

    if (!PyArg_ParseTuple(args, "O", &listObj))
        return NULL;

    Py_ssize_t length = PyList_Size(listObj);
    long i, sum = 0;
    for (i = 0; i < length; i++)
    {
        PyObject *temp = PyList_GetItem(listObj, i);
        long elem = PyLong_AsLong(temp);
        sum += elem;
    }

    return Py_BuildValue("i", sum);
}

static char addList_docs[] = "add(): add all elements of the list\n";

static PyMethodDef addLust_funcs[] = {
    {"add", (PyCFunction)addList_add, METH_VARARGS, addList_docs},
    {NULL, NULL, 0, NULL}};

static struct PyModuleDef addList = {
    PyModuleDef_HEAD_INIT,
    "addList",
    addList_docs,
    -1,
    addLust_funcs};

PyMODINIT_FUNC PyInit_addList(void)
{
    return PyModule_Create(&addList);
}

似乎一切都是正确的,我可以通过调用addList来运行Python代码。add()函数。但在构建模块时,我得到了以下输出(请注意,在出现此错误后,我可以很好地运行Python代码):

$pythonsetup.py安装运行安装运行构建运行build_ext运行install_lib运行install_egg_infoTraceback(最近一次调用最后一次):文件"setup.py",第4行,在ext_modules=[扩展名('addList',['adder. c'])])File"C:\User\x\AppData\Local\Program ms\Python\Python37\lib\distutils\core.py",第148行,在设置dist.run_commands()File"C:\User\x\AppData\Local\节目\Python\Python37\lib\distutils\dist.py",第966行,在run_commandsself.run_command(cmd)File"C:\User\x\AppData\Local\程序\Python 37\lib\distutils\dist.py",第985行,在run_command()File"C:\User\x\AppData\Local ms\Python\Python37\lib\distutils\命令\install.py",第557行,在运行self.run(cmd_name)File"C:\User\x\AppData\本地\程序\Python\Python37\lib\distutils\_version",第313行,run_commandsafe_version_command(命令)File"C:\用户\x\AppData\本地\程序\Python\Python37\lib\distutils\dist.py",第984行,run_commandcmd_obj.ensure_finalized()File"C:\用户\x\AppData\本地\程序\Python\Python37\lib\distutils\cmd.py",第107行,ensure_finalizedself.finalize_options()File"C:\用户\x\AppData\本地\程序\Python\Python37\lib\distutils\命令\install_egg_info.py",第26行,finalize_optionsto_filename(safe_version(cmd.py())),File"C:\用户\x\AppData\本地\程序\Python\Python37\lib\distutils\命令\install_egg_info.py",第68行,在self.distribution.runversion=version.replace属性错误:'浮动'对象没有属性'替换'

设置。py公司

from distutils.core import setup, Extension

setup(name='addList', version=1.0,
      ext_modules=[Extension('addList', ['adder.c'])])

main.py

import addList

l = [1, 2, 3, 5, 4]

print(addList.add(l))

共有1个答案

钮实
2023-03-14

错误消息显示:

版本replace(“”,“.”)AttributeError:“float”对象没有属性“replace”

您的构建脚本显示:

version=1.0

很明显,它需要的是字符串,而不是浮点。

 类似资料:
  • 问题内容: 我有一个C扩展模块,很高兴分发内置的二进制文件。SetupTools使得在OS X和GNU / Linux上构建扩展模块变得很容易,因为那些OS随GCC一起提供,但是我不知道如何在Windows中进行。 我需要购买Visual Studio的副本,还是可以使用Visual Studio Express?我可以只使用Cygwin或MinGW吗? 问题答案: 您可以同时使用MinGW和VC

  • 我有一个Jenkins/Maven/Git多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于Git和子模块,我必须使用命令“Git Clone-recursive ssh://xxxxxxx.Git”在Linux中克隆repo。 这意味着我必须检查Jenkins Git插件选项“Advanced sub-modules Behavious”和“recursivy update

  • 本文向大家介绍Python模块文件结构代码详解,包括了Python模块文件结构代码详解的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Python模块文件结构的相关内容,具体如下。 Python文件结构 文件结构(范例全文) 文件结构(分行介绍) (1)起始行(指定使用的Python的版本) (2)模块文档(文档字符串,如果跨行用三个单引号扩起来) (3)模块导入 (4)(全局)变量定义

  • 我想安装Python 3.4.6,但它只有源代码格式。 Python官方网站上的安装选项是Gzip'd源tarball和XZ压缩源tarball。我以前从未以这种方式安装过Python,所以我不知道该怎么办。我如何安装Python和我下载什么文件? https://www.python.org/downloads/release/python-346/

  • 问题内容: 我已经从源代码安装了python 2.6,后来又以某种方式错误地从包管理器中安装了另一个python 2.6。 我找不到卸载从源代码构建的python的方法,这可能/容易吗? 运行ubuntu 10.04。 问题答案: 您可以使用checkinstall删除Python。这个想法是: 安装checkinstall 使用checkinstall对您的Python安装进行详细介绍 使用删除

  • 模块标记 coolie-cli 的模块构建方式应该是比较特殊的一类,与 webpack 一样,都是另辟蹊径。 webpack:依赖模块放到数组里,数组索引值就是模块 ID。 coolie-cli:依赖模块全局标记 ID(三十六进制)。 coolie-cli 可以将长长的物理路径压缩成最短的字符,达到压缩率最大化,而不是将模块直接合并。 // module1.js define(function(r