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

作者:

文章目录
  • ①pip3 install cython ②安装Visual Studio C编译器 启动VisualStudioSetup.exe, 必须选择C++开发, 可选Python开发, 点击安装。
  • 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文件
  • 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文件成功
  • ①若没有Visual Studio C,则只生成.pyc文件;有,则可生成.pyd文件 ②编译文件hello.py以及setup.py文件的文件名都需要和后续对应上的。待编译文件名是什么,则setup代码里文件名是什么;setup文件名和打包命令文件名是一致的。 ③当删除hello.py文件时,导入会显示红色下划线,如果同目录下有hello.pyc或hello.pyd文件,则运行不会报导入失败错误 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Python安装配置和开发环境Anaconda、PyCharm的安装与使用(图文) python与pycharm设置文件夹为源代码根目录方式 pycharm环境下python、JS的包管理配置完整过程 Python在pycharm中使用environment.ylm文件配置虚拟环境的过程 python离线安装requests模块并且在pycharm中实现使用 PyCharm2025中设置conda的多个Python版本的方法实践
  • 目录
    • 1.环境
    • 2.待编译文件hello.py以及setup.py文件
    • 3.运行调试
    • 4.写在最后

    pyd文件是什么?

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

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

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

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

    ①pip3 install cython

    ②安装Visual Studio C编译器

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

    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文件

    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文件成功

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

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

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

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

    您可能感兴趣的文章:

    • Python安装配置和开发环境Anaconda、PyCharm的安装与使用(图文)
    • python与pycharm设置文件夹为源代码根目录方式
    • pycharm环境下python、JS的包管理配置完整过程
    • Python在pycharm中使用environment.ylm文件配置虚拟环境的过程
    • python离线安装requests模块并且在pycharm中实现使用
    • PyCharm2025中设置conda的多个Python版本的方法实践

    站内搜索