我们可以在Python中使用C代码吗?

2023-12-29

我知道Python提供了一个API,所以你可以在C代码中调用Python解释器,但我想要的是相反的。

我的程序需要使用一些C API,所以代码必须用C编写。但我也想用Python打包程序。这意味着我想在 Python 中调用那些 C 函数或可执行文件。那可能吗?

如果我希望 C 代码成为一个库,这意味着我将它与#include和的联系*.o可能在Python中,该怎么做?那可能吗?如果我将C代码写入可执行文件,这意味着它变成了命令,我可以直接在Python中调用它吗?

另外,我听说Python代码可以编译,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?


我想在 python 中调用那些 C 函数或可执行文件。那可能吗。

是的,您可以编写可以作为模块导入到 Python 中的 C 代码。 Python 称这些为扩展模块。您可以直接从 Python 调用它,示例来自文档 http://docs.python.org/2/extending/extending.html:

Python代码

import example
result = example.do_something()

C Code

static PyObject * example(PyObject *self)
{
    // do something
    return Py_BuildValue("i", result);
}

如果我希望 C 代码成为一个库,这意味着我将它与 #include 和 python 中可能的 *.o 链接一起使用,如何做到或者是否可能。

您将其构建为共享库*.dll or *.so您还可以研究使用 distutils 来分发您的模块。

如果我将C代码写入可执行文件,这意味着它变成了命令,我可以直接在python中调用它吗?

如果你写一个*.exe那么你正在做相反的事情(调用来自 C 的 Python http://docs.python.org/2/c-api/)。您选择的方法(exe 与共享库)取决于您是否想要“带有一些 Python 的 C 程序” or a “带有一些 C 语言的 Python 程序”.

另外,我听说python代码可以编译,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?

Python读取*.py文件并编译为*.pyc bytecode运行时的文件。然后字节码在 Python 虚拟机中运行。这意味着“第二次执行同一文件的速度更快,因为可以避免从源代码到字节码的重新编译。”(来自 Python 术语表)所以如果你还没有编辑你的*.py文件,它将运行*.pyc。您可以分发*.pyc文件没有*.py文件,但它们未加密并且可以进行逆向工程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以在Python中使用C代码吗? 的相关文章

  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 如何从 WooCommerce 获取所有结帐字段?

    我喜欢获取所有可用的结账字段 包括第三方的 fields WC gt checkout gt checkout fields 返回致命错误 Fatal error Call to a member function get country
  • 无法创建 sessionFactory 对象.org.hibernate.HibernateException

    您好 我是 hibernate 框架的新手 当我运行 hibernate 示例示例代码时 如果互联网连接可用 它工作正常 如果互联网连接不可用 则它无法工作 并给出如下错误 log4j WARN No appenders could be
  • 高效的用户界面

    速度和易学性并不直接相互对抗 但设计这样一个缺少其中之一 或两者 的 GUI 似乎很容易 大多数时候 GUI 设计者似乎更喜欢 易于学习 即使 快速应用 更为明智 只有少数 UI 概念或程序注重最大限度地提高您使用该程序所做的任何操作的最高
  • C++ 中整数异或的可能结果

    是否保证 2 32 34 在 C 20 中 是的 就是这样 expr xor http eel is c draft expr xor定义它 Given the coefficients xi and yi of the base 2 re
  • Git 归咎于重组的 SVN 存储库

    git blame没有向我显示布局已重新组织的 SVN 存储库的所有历史记录 我正在使用 git svn 访问 SVN 存储库 SVN 存储库过去的结构具有巨大的文件夹树来保存许多项目 去年 我重新组织并将布局扁平化为更标准的主干 标签 分
  • JFrame 和 JPanel 问题

    我正在尝试为当地一家销售糕点 百吉饼和咖啡的百吉饼店制作一个程序 我在实现 JFrame 中制作的面板时遇到问题 任何帮助理解如何使我的 JFrame 看起来像这样都会有帮助http kepler covenant edu COS150 B
  • 告诉我的库函数的用户传递的变量类型不正确的最佳方法是什么

    我目前正在创建一个 javascript 函数库 主要供我自己使用 但你永远无法确定其他人最终是否会在他们的项目中使用它 我至少会创建它 就好像这可能发生一样 大多数方法仅在传递的变量具有正确的数据类型时才有效 现在我的问题是 提醒用户变量
  • 无法通过 Ant 在 JUnit 测试中自动装配 - 看起来 @RunWith(SpringJUnit4ClassRunner.class) 不起作用

    我的测试用例看起来像这样 RunWith SpringJUnit4ClassRunner class ContextConfiguration locations classpath applicationContext xml publi
  • Youtube V3 API - 根据关键字获取随机视频

    我使用下面的代码导航到 Youtube 数据的不同页面 我根据 randomNumber 1 到 20 一次又一次地调用该服务 但我不认为这是更好的方法 youtube new Google Service YouTube client s
  • 如何从 package.json 中设置环境变量?

    如何从内部设置一些环境变量package json与使用npm start喜欢命令 这是我目前拥有的package json scripts help tagove help start tagove start 我想设置环境变量 例如NO
  • scipy find_peaks 是否有相反版本?

    我正在寻找 Python 绘图中的最小点 是否有 from scipy signal import find peaks 的相反版本 如何在 python 上找到图的局部最小值的 x 点 只需将数据颠倒过来并寻找峰值即可 scipy sig
  • 如何使用 Modifier 镜像 canvas 制作的可组合函数?

    问题描述 我正在尝试使用 Compose 和 Canvas 在 android 上创建一个模拟 7 段显示的组件 如下所示 为此 我采取了仅创建该组件的一半并向下镜像我创建的这部分的策略 所以我会拥有整个显示 这是 7 段显示屏的顶部部分
  • 如何在运行时创建 WPF UserControl 的图像

    我创建了一个 WPF 应用程序 其中有Canvas我把它放在上面UserControls它们可以由用户移动和调整大小 就像 Windows 窗口一样 现在我发现在旧电脑上这可能会非常慢 这是一个问题 作为一种解决方案 我考虑生成一个显示 U
  • Spring Cloud Stream供应商功能模型

    我正在尝试使用 Spring Cloud Stream 和新功能支持配置 但我无法理解如何实现与注释配置相同的结果 每次创建用户时 我都需要向布鲁克发送一条消息 通过基于注释的配置 我可以像这样完成它 public UserProducer
  • React-Native Run-Android 和 React-Native Start

    我必须跑吗react native run android and react native start每次重新打开项目和模拟器时在命令提示符中 谢谢 你通常会这样做 这react native run android如果您不想再次部署 A
  • “使用选择”表示法指定 Exact Online 数据容器的多个分区

    我想在数据中心选择一个活动分区 通常我会使用以下语句 INVANTIVE gt use 1552839 2 gt Exclamation itgendhb077 Error in Invantive Data Hub Database 15
  • 将多列中的值合并为一列

    I have the following data structure As you see in column J I am trying to merge data into one column from columns A C E
  • Django - 如何使用带有“if”和“else”检查的自定义模板标签? [复制]

    这个问题在这里已经有答案了 我使用 python 制作了一个自定义权限模板标签 register template Library register simple tag def get user perm request perm try
  • typescript 声明第三方模块

    我如何声明一个如下所示的第三方模块 在第三方模块中 module exports function foo do somthing 在我的代码中 import as foo from foo module Can not find a de
  • 我们可以在Python中使用C代码吗?

    我知道Python提供了一个API 所以你可以在C代码中调用Python解释器 但我想要的是相反的 我的程序需要使用一些C API 所以代码必须用C编写 但我也想用Python打包程序 这意味着我想在 Python 中调用那些 C 函数或可