python 中 .py文件 转 .pyd文件的操作


Posted in Python onMarch 04, 2021

pyd文件生成

安装easycython库

pip install easycython

test.py

def test():
  print("调用成功")

main.py

import test
test.test()

test.py文件重命名为:test.pyx

python 中 .py文件 转 .pyd文件的操作

终端运行命令

easycython *.pyx

python 中 .py文件 转 .pyd文件的操作

重命名pyd文件,删除:cp36-win_amd64.

python 中 .py文件 转 .pyd文件的操作

运行代码,调用成功:

python main.py

python 中 .py文件 转 .pyd文件的操作

代码实现

import glob
import os
def get_file_path(path, file_type):
  """
  取文件夹下相同后缀文件路径列表
  :param path: 文件夹路径
  :param file_type: 后缀名
  :return:文件路径列表
  """
  paths = glob.glob(os.path.join(path,
                  file_type
                  ))
  return paths
def str_replace(old_str,old,new):
  """
  在 old_str 字符串中,把 old 替换成 new
  :param old_str:原字符串
  :param old:被替换的字符
  :param new:替换后的字符
  :return:替换后的字符串
  """
  new_str = old_str.replace(old,new)
  # print("new_str:",new_str)
  return new_str
def py_to_pyd(path_dir,middle_name_pyd):
  """
  .py 文件 转 .pyd文件
  :param path_dir:.py文件所在的文件夹路径
  :param middle_name_pyd:pyd的中间名,如: .cp36-win_amd64
  :return:
  """
  # .py 文件 转成 .pyx文件
  file_type = '*.py'
  paths = get_file_path(path_dir, file_type)
  # print(paths)
  for pa in paths:
    new_str = str_replace(pa, 'py', 'pyx')
    os.rename(pa, new_str)
  # main.pyx 转成 main.py
  old_name = path_dir + r'\main.pyx'
  new_name = path_dir + r'\main.py'
  os.rename(old_name,new_name)
  # 把 pyx 转成 pyd
  os.system("cd {} && easycython *.pyx ".format(path_dir))
  # 删除所有 .html 文件
  file_type = '*.html'
  paths = get_file_path(path_dir, file_type)
  # print(paths)
  for pa in paths:
    os.remove(pa)
  # 删除所有 .pyx 文件
  file_type = '*.pyx'
  paths = get_file_path(path_dir, file_type)
  # print(paths)
  for pa in paths:
    os.remove(pa)
  # 删除所有 .c 文件
  file_type = '*.c'
  paths = get_file_path(path_dir, file_type)
  # print(paths)
  for pa in paths:
    os.remove(pa)
  # 删除名字中的 .pyd文件 中的 cp36-win_amd64
  file_type = '*.pyd'
  paths = get_file_path(path_dir, file_type)
  # print(paths)
  for pa in paths:
    new_str = str_replace(pa, middle_name_pyd, '')
    os.rename(pa,new_str)
if __name__ == '__main__':
  path_dir = r"C:\Users\xiahuadong\Desktop\number_humen - 副本"
  middle_name_pyd = '.cp36-win_amd64'
  py_to_pyd(path_dir, middle_name_pyd)

补充:Python 常见文件格式 .py .pyc .pyw .pyo .pyd 之间的主要区别

Python([ˈpaɪθən])是一种面向对象、解释型计算机程序设计语言。Python语法简洁、清晰,具有丰富和强大的类库。

Python源代码遵循GPL(GNU General Public License)协议,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。

Python常被称为胶水语言,能把用其他语言编写的各模块(尤其是C/C++)轻松地联结在一起。常见情形是,用Python快速生成程序原型(有时甚至是程序最终界面),然后对其中有特别要求的部分,用更合适的语言改写;譬如:3D游戏中的图形渲染模块,性能要求特别高,就可用C/C++重写,而后封装为Python可调用的扩展类库。需要注意的是,在您使用扩展类库时可能需要考虑平台问题,某些扩展类库可能不提供跨平台实现。

一般认为,Python 是一种解释性语言,Python 在执行时,会先将 .py 文件中的源代码编译成 byte code(字节码),然后再由 Python Virtual Machine 来执行这些编译 byte code。

这种机制的基本思想跟 Java、.NET 一致;但 Python Virtual Machine 与 Java 或 .NET 的 Virtual Machine 不同的是:Python 的 Virtual Machine 是一种更高级的 Virtual Machine。这里的高级并不是通常意义上的高级,不是说 Python 的 Virtual Machine 比 Java 或 .NET 的功能更强大,更拽,而是说和 Java 或 .NET 相比,Python 的 Virtual Machine 距真实机器的距离更远。或者可以这么说,Python 的 Virtual Machine 是一种抽象层次更高的 Virtual Machine。

Python 提供了一种中间编译结果保存机制,即 byte code,或更准确地说,保存 PyCodeObject。事实上,Python 确实提供了这样一种机制 —— .pyc 文件。在执行一个 .py 文件的源代码之后,Python 并不会自动生成与该 .py 文件对应的 .pyc 文件。Python 会根据需要自动触发、创建 .pyc 文件,原理很简单,就是利用 Python 的 import 机制。

在 Python 运行过程中如碰到 import abc 这样的语句,Python 将会在设定好的 path 中寻找 abc.pyc 或 abc.dll 文件。若没有这样的文件,而只是发现了 abc.py 文件,那么,Python 会首先将 abc.py 编译成相应的 PyCodeObject 中间结果,然后再创建 abc.pyc 文件,并将中间结果写入该文件。接下来,Python 才会对 abc.pyc 文件进行一个 import 动作,实际上也就是将 abc.pyc 文件中的 PyCodeObject 重新在内存中复制出来,加以运行。

由于 Python .pyc 文件的此种运行机制,所以,可随时删除所有中间过程 .pyc 文件,当 Python 再次运行时,还会重生成这些 .pyc 文件,对您所编辑程序的运行并无任何影响。当然,得有源代码才行。

视窗用 python.exe 运行 .py ,用 pythonw.exe 运行 .pyw。因为安装视窗版 Python 时,扩展名 .py 自动被登记为用 python.exe 运行, 而 .pyw 则被登记为用 pythonw.exe 运行。

.py 文件

以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。当然,也可用文本编辑器进行修改。

.pyc 文件以 .pyc 作扩展名的文件是 python 编译文件。.pyc 文件是不能用文本编辑器进行编辑的,其优点是 .pyc 文件的执行速度要远快于 .py 文件。至于为什么要有 .pyc 文件,这个需求太明显了,因为 .py 文件是可直接看到源码的,若是软件开发商的话,不可能把源码泄漏出去?所以,就需编译成 .pyc 后再发布。

.pyw 文件

.pyc 文件执行时,桌面会出现类似 CMD 命令的黑色 shell 窗口,十分难看,于是 .pyw 文件就应运而生了。.pyw 文件与 .pyc 文件的执行,本质上并没什么区别,只是 .pyw 文件执行的时候不会出现类似 CMD 命令的黑色 shell 窗口。

.pyw 文件格式主要是设计用来运行纯 GUI 图形用户界面程序的。 纯 GUI 图形用户界面程序的用户不需要看到类似 CMD 命令的黑色 shell 控制台窗口。.pyw 文件运行时,所有 stdout、stderr 输出无效,所有原 stdin 的读取只会得到 EOF。值得一提的是,开发纯 GUI 图形用户界面程序时,可暂时把 .pyw 改成 .py,以便运行时调出控制台窗口,看到所有错误信息,方便修改、调试。

.pyo 文件

.pyo 文件是优化编译后的程序。 “python -O 源文件” 即可将源程序编译为 .pyo 文件。同样,.pyo 文件也是不能用文本编辑器进行编辑的。

.pyd 文件

.pyd 文件并不是用 python 编写成的,.pyd 文件一般是其他语言编写的 python 扩展模块。.pyd 文件是用 D 语言按照一定格式编写,并处理成二进制的文件。

那么什么是 “D 语言” 呢?它是 C/C++ 的综合进化版,不仅具有二者 的全部优点,且整体性能更佳,但其抽象程度高。

D 语言最初由 Digital Mars 公司就职的 Walter Bright 于 2001 年发布,意图改进 C++ 语言。目前最新 D 语言被简称为 D2。最主要的 D 语言的实现是 DMD。

D 语言源自 C/C++,借鉴了众多编程语言的特色和现代编译器技术,融会贯通了设计者丰富的实践经验,使之具备了非凡的威力 ── 既有 C/C++ 语言的强大威力,又有 Python 和 Ruby 的开发效率。它集众多系统级编程所需的功能于一身,例如垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内建基本运行时信息。

python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module,在 python 中使用时,把它当成 module 来用就可以了,即:import 路径名.modulename 即可,路径名为 .pyd 文件所在的路径。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python比较两个列表是否相等的方法
Jul 28 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python删除某个字符
Mar 19 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 #Python
python 指定源路径来解决import问题的操作
Mar 04 #Python
python源文件的字符编码知识点详解
Mar 04 #Python
python3判断IP地址的方法
Mar 04 #Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 #Python
python和opencv构建运动检测器的实现
Mar 03 #Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 #Python
You might like
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
一个SQL管理员的web接口
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
Python中的super用法详解
2015/05/28 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
Python实现自动签到脚本功能
2020/08/20 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
质量安全标语
2014/06/07 职场文书
辅导员学期工作总结
2015/08/14 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server