Python打包生成.pyc和.pyd文件方式

 更新时间:2026年01月21日 09:15:19   作者:Demons_皮  
.pyd文件的用途、环境配置、编译步骤和调试方法,.pyd文件是Python的动态链接库,适用于特定版本的Python,难以反编译,执行效率高,编译步骤包括使用Cython和Visual Studio C编译器,生成.pyd文件,调试时需确保文件名一致,并处理导入错误

pyd文件是什么?

pyd文件类似于DLL, 一般用C/C++语言编译而成, 可用作模块导入Python程序中。

pyd文件仅适用于特定版本的Python, 不同版本间互不兼容, 如Python3.8不支持3.7版本的文件。

pyd文件用C/C++语言编译而成, 难以被反编译, 在保护Python程序源码上有很好的效果。

而且由于使用了C/C++等低级语言, 代码执行效率较高。

1.环境

①pip3 install cython

②安装Visual Studio C编译器

启动VisualStudioSetup.exe, 必须选择C++开发, 可选Python开发, 点击安装。

2.待编译文件hello.py以及setup.py文件

hello.py文件内容如下

def greet(str):
    return "hello " + str

setup.py文件内容如下

from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension

def main():
# 这里为文件名 可以增加多个Extension(' ', [' '])
  extensions = [Extension('hello', ['hello.py'])]  # 待编译文件名
  setup(ext_modules=cythonize(extensions))
if __name__ == '__main__':
  main()

执行打包命令

cmd进入hello.py的文件目录下,执行python setup.py build_ext

执行成功之后,同目录会生成一个hello.c的文件和build的文件夹,在build文件夹目录里面存放着编译好的.pyd文件

3.运行调试

from hello import greet
print(greet("tom"))

现在运行打印出hello tom还并未成功,此时仍是调用的hello.py文件。

(调用.pyc、.pyd文件的方式仍是通过import导入)

删除hello.py文件,只保留hello.pyc在该目录,运行成功,则说明pyc文件成功

删除hello.pyc文件,从build目录下拷贝出.pyd并改名为hello.pyd文件,运行成功,则说明pyd文件成功

4.写在最后

①若没有Visual Studio C,则只生成.pyc文件;有,则可生成.pyd文件

②编译文件hello.py以及setup.py文件的文件名都需要和后续对应上的。待编译文件名是什么,则setup代码里文件名是什么;setup文件名和打包命令文件名是一致的。

③当删除hello.py文件时,导入会显示红色下划线,如果同目录下有hello.pyc或hello.pyd文件,则运行不会报导入失败错误

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python如何实现convolution neural network卷积神经网络算法

    python如何实现convolution neural network卷积神经网络算法

    卷积神经网络(CNN)是深度学习中重要的算法之一,主要应用于图像识别和处理领域,其基本原理是模拟人类视觉系统,通过卷积层、激活函数和池化层等组件提取图像的特征,并通过全连接层进行分类或其他任务,CNN训练过程中使用大量标记图像数据
    2024-10-10
  • Python实现将HTML转换成doc格式文件的方法示例

    Python实现将HTML转换成doc格式文件的方法示例

    这篇文章主要介绍了Python实现将HTML转换成doc格式文件的方法,涉及Python htmlparser及docx模块的相关使用技巧,需要的朋友可以参考下
    2017-11-11
  • pycharm 安装JPype的教程

    pycharm 安装JPype的教程

    这篇文章主要介绍了pycharm 安装JPype的步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python 列表、字典和集合的添加和删除操作

    python 列表、字典和集合的添加和删除操作

    今天小编就为大家分享一篇python 列表、字典和集合的添加和删除操作,有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pycharm终端安装pytorch失败的问题及解决

    pycharm终端安装pytorch失败的问题及解决

    这篇文章主要介绍了pycharm终端安装pytorch失败的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 2020年10款优秀的Python第三方库,看看有你中意的吗?

    2020年10款优秀的Python第三方库,看看有你中意的吗?

    2020已经过去,在过去的一年里,又有非常多优秀的Python库涌现出来。相对于numpy、TensorFlow、pandas这些已经经过多年维护、迭代,对于大多数Python开发者耳熟能详的库不同。
    2021-01-01
  • Spring @Enable模块驱动原理及使用实例

    Spring @Enable模块驱动原理及使用实例

    这篇文章主要介绍了Spring @Enable模块驱动原理及使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python打开windows应用程序的实例

    python打开windows应用程序的实例

    今天小编就为大家分享一篇python打开windows应用程序的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 关于python中range()的参数问题

    关于python中range()的参数问题

    这篇文章主要介绍了关于python中range()的参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • pandas实现导出数据的四种方式

    pandas实现导出数据的四种方式

    这篇文章主要介绍了pandas实现导出数据的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论