将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文件的资料请关注脚本之家其它相关文章!

相关文章

  • Python基于QQ邮箱实现SSL发送

    Python基于QQ邮箱实现SSL发送

    这篇文章主要介绍了Python基于QQ邮箱实现SSL发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python基于百度AI实现抓取表情包

    Python基于百度AI实现抓取表情包

    本文先抓取网络上的表情图像,然后利用百度 AI 识别表情包上的说明文字,并利用表情文字重命名文件,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python爬虫框架Scrapy基本用法入门教程

    Python爬虫框架Scrapy基本用法入门教程

    这篇文章主要介绍了Python爬虫框架Scrapy基本用法,结合实例形式分析了xpath简单使用、xmlfeed模板、csvfeed模板及crawlfeed模板简单使用方法,需要的朋友可以参考下
    2018-07-07
  • Python中装饰器使用方法整理

    Python中装饰器使用方法整理

    这篇文章主要介绍了Python中装饰器使用方法整理,装饰器是给现有的模块增添新的小功能,可以对原函数进行功能扩展,而且还不需要修改原函数的内容,也不需要修改原函数的调用,需要的朋友可以参考下
    2023-08-08
  • pytest生成简单自定义测试结果的html报告

    pytest生成简单自定义测试结果的html报告

    这篇文章主要为大家介绍了pytest生成简单自定义测试结果html报告,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • python tkinter图形界面代码统计工具(更新)

    python tkinter图形界面代码统计工具(更新)

    这篇文章主要为大家详细介绍了python tkinter图形界面代码统计工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 简单的Python抓taobao图片爬虫

    简单的Python抓taobao图片爬虫

    这篇文章主要介绍了简单的Python抓taobao图片爬虫,需要的朋友可以参考下
    2014-10-10
  • Python如何提取html中文本到txt

    Python如何提取html中文本到txt

    这篇文章主要介绍了Python如何提取html中文本到txt问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 完美解决TensorFlow和Keras大数据量内存溢出的问题

    完美解决TensorFlow和Keras大数据量内存溢出的问题

    这篇文章主要介绍了完美解决TensorFlow和Keras大数据量内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 用Python展示动态规则法用以解决重叠子问题的示例

    用Python展示动态规则法用以解决重叠子问题的示例

    这篇文章主要介绍了用Python展示动态规则法用以解决重叠子问题的一个棋盘游戏的示例,动态规划常常适用于有重叠子问题和最优子结构性质的问题,且耗时间往往远少于朴素解法,需要的朋友可以参考下
    2015-04-04

最新评论