将Python代码编译为pyd文件的两种方法

 更新时间:2026年03月10日 09:09:27   作者:mahuifa  
文章介绍了两种将Python代码编译为pyd文件的方法:使用Cython和使用Nuitka,Cython方法可以正常调用logging,但不支持高亮显示,Nuitka方法可以保持调用栈信息,但打包速度慢且生成文件体积大,下面小编为大家详细说说,需要的朋友可以参考下

方法1:使用Cython编译python模块为pyd

  1. 文件后缀名称推荐使用pyx,py也可以;
  2. 需要创建setup.py编译文件;
  3. 编译为pyd后调用logging无法输出行号、文件名、函数名;

安装pip install setuptools Cython

创建一个hello.pyx文件,如果在pycharm中不能高亮显示则打开【文件】【设置】【编辑器】【文件类型】【python】,添加一个*.pyx

def fun1():
    print("Hello from plugin function fun1!")

class Hello:
    def __init__(self):
        pass
    def fun(self):
        print("Hello from plugin class Hello!")

创建一个setup.py文件,用于将hello.pyx编译为pyd;

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("hello.pyx"),
    zip_safe=False,
)

运行 python setup.py build_ext --inplace 来编译生成扩展模块。

静态导入模块

from plugins.hello import *

fun1()
h = Hello()
h.fun()

动态导入模块(可实现插件)

import importlib

# 动态导入 plugins.hello 模块
module = importlib.import_module("plugins.hello")
# 或者
sys.path.insert(0, plugin_path) # 添加插件目录到系统路径,以便可以找得到插件
module = importlib.import_module("hello")

# 从模块中获取 fun1 函数并调用
fun1 = getattr(module, "fun1")
fun1()

# 从模块中获取 Hello 类并实例化,然后调用其 fun 方法
Hello = getattr(module, "Hello")
h = Hello()
h.fun()

方法2:使用nuitka打包现有py代码

  1. 打包为pyd后调用logging可以输出文件名、行号等信息,保持了Python的调用栈信息;
  2. 打包速度较慢、生成文件体积大;
  • 安装pip install nuitka
  • 使用命令nuitka --module your_module.py编译为pyd;(编译单文件)
  • 使用命令nuitka --module --include-package=src src将src模块编译为pyd(一个包)
    • 确保模块有__init__.py文件,这样 Python 会把它当作包处理;
    • –module 表示生成 .pyd 文件;
    • –include-package=src 指定要包含的包(假设你的包名为 src);
    • src 是要打包的包目录;

以上就是将Python代码编译为pyd文件的两种方法的详细内容,更多关于Python代码编译为pyd文件的资料请关注脚本之家其它相关文章!

相关文章

  • pandas的排序、分组groupby及cumsum累计求和方式

    pandas的排序、分组groupby及cumsum累计求和方式

    这篇文章主要介绍了pandas的排序、分组groupby及cumsum累计求和方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 一文搞懂Python中is和==的区别

    一文搞懂Python中is和==的区别

    is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同,下面来看看具体区别在哪?对Python中is和==的区别感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • 使用Python实现遗传算法的完整代码

    使用Python实现遗传算法的完整代码

    这篇文章主要介绍了使用Python实现遗传算法,其本质是一种高效、并行、全局搜索的方法,自适应的控制搜索过程以求得最优解,需要的朋友可以参考下
    2023-03-03
  • 在Python的web框架中编写创建日志的程序的教程

    在Python的web框架中编写创建日志的程序的教程

    这篇文章主要介绍了在Python的web框架中编写创建日志的程序的教程,示例代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python设置Word全局样式和文本样式的示例代码

    Python设置Word全局样式和文本样式的示例代码

    这篇文章主要介绍了如何利用Python对Word内容进行各种样式的设置,让其能够看起来更加的美观。文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • Python精确统计函数执行时间的多种方法

    Python精确统计函数执行时间的多种方法

    在软件开发中,我们常常需要了解代码的执行效率,本文将介绍 Python中统计 函数执行时间 的多种方法,及其适用场景和注意事项,需要的朋友可以参考下
    2026-01-01
  • python网络编程之文件下载实例分析

    python网络编程之文件下载实例分析

    这篇文章主要介绍了python网络编程之文件下载实现方法,实例分析了Python基于FTP及http实现文件下载的技巧,需要的朋友可以参考下
    2015-05-05
  • Python开发的实用计算器完整实例

    Python开发的实用计算器完整实例

    这篇文章主要介绍了Python开发的实用计算器,结合完整实例形式分析了Python实现计算器四则运算、开方、取余等相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • Mac中pyenv的安装与使用教程

    Mac中pyenv的安装与使用教程

    pyenv支持linux下python多版本的共存和版本之间切换,非常方便,下面这篇文章主要给大家介绍了关于Mac中pyenv安装与使用的相关资料,需要的朋友可以参考下
    2022-02-02
  • Python运维自动化之nginx配置文件对比操作示例

    Python运维自动化之nginx配置文件对比操作示例

    这篇文章主要介绍了Python运维自动化之nginx配置文件对比操作,涉及Python针对文件的读取、遍历、比较进而达到差异对比的相关操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论