Python生成pyc以及pyd文件的方法

news2024/11/16 4:39:33

文章目录

  • 0. 背景
  • 1. pyc文件的生成
  • 2. pyd文件的生成
  • 3. 两者的异同

0. 背景

当有些模块的代码需要一定的保密性,这个时候就需要考虑pyc和pyd文件了。今天就好好琢磨一下这两种文件的生成和使用方法。让自己的知识能够朝着商业化的方向再前进一步。

1. pyc文件的生成

首先编辑名称为Calcupart.py 的测试文件

""" 
@author:George 
@file: Calcupart.py 
@time: 2023/07/25 
@e-mail:gaoxin_hit@163.com
"""

class Section():
    def __init__(self, Do, Di, fc, Fz):
        self.Do = Do
        self.Di = Di
        self.fc = fc
        self.Fz = Fz

    def Check_ULS(self):
        A = 3.1416/4*(self.Do**2 - self.Di**2)
        F_R = A*self.fc
        index = "OK" if F_R/1000 >= self.Fz else "Not OK"

        return {"index_ULS": index, "A": A, "F_R": F_R/1000,
                "Fz": self.Fz, "SM": F_R/1000/self.Fz}

然后在另一个文件中采用py_compile模块,运行tgd02.py文件。

""" 
@author:George 
@file: tgd02.py 
@time: 2023/07/25 
@e-mail:gaoxin_hit@163.com
"""
import py_compile

py_compile.compile(r'D:\PythonProject\Testpycd\Calcupart.py')

完毕以后查看项目文件夹下名称为__pycache__的文件夹,其中名称为Calcupart.cpython-38.pyc的文件便是生成的pyc文件。
在这里插入图片描述
将其单独放入新的项目中,直接引用即可(需要将文件名称改为原来的模块名,即应该将文件名称中“.cpython-38”字符删除)。

不过,需要说明的是,如果打开pyc文件可以发现,有部分源代码还是可以看见的。
在这里插入图片描述

以上,便是单个文件编译成*.pyc文件的全过程。还有批量编译的,目前我个人还没有这样的需求,等用到了再说(如果文件不是很多的话我还是愿意逐一编译)。

另外还有一个问题,当前编译的这个模块没有引用到其他模块,如果编译的模块引用到了其他模块,那么有没有其他需要特别注意的问题?这也是需要留意的。

2. pyd文件的生成

pyd文件的生成要比pyc的生成过程要麻烦一些。

首先需要创建setup.py文件

from setuptools import setup
from Cython.Build import cythonize

setup(
    name="XXXXX",						# 这个位置我也不确定有什么用,随便写吧!
    ext_modules=cythonize("Calcupart.py") # 这里放入需要生成为pyd文件的py文件
)

然后在terminal控制台执行如下指令进行编译,我是控制台所在文件路径切换到当前目录下的(Pycharm里面其实不用切换,直接就在当前项目所在目录下)

python setup.py build_ext --inplace

我在执行上面这一句的时候给出了如下报错:

Microsoft Visual C++ 14.0 or greater is required.

这时需要在微软官网下载"Microsoft C++ Build Tools"这个工具(具体方式可以参考这里),然后安装如下组件:
在这里插入图片描述
最后,在重新再控制台运行上述命令即可。pyd文件将会出现在项目文件夹下的build——>lib.win-amd64-cpython-38文件夹里,我这边的名称是Calcupart.cp38-win_amd64.pyd

必须注意,pyd文件的使用和pyc有些不同,使用的时候必须将pyd文件的名称改为原来对应的py文件的名称(后缀不用改),都则会出现引用不了的情况!

3. 两者的异同

首先,pyd文件的保密性要更好一些。下面的截图是pyd文件打开后的情形。完全看不到源码。
在这里插入图片描述
其次,个人感觉pyd就像是仅仅把py文件加密而已,即使源文件(*.py)引用了其他模块,也不要紧。这种方式是我比较喜欢的。点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/805098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为企业发展赋能增效:中国智能交通协会来访闪马智能

7月26日,中国智能交通协会秘书长杨颖一行来访闪马智能,闪马智能助理总裁兼营销与方案中心总经理黄智宏、CMO王一佳、副总裁詹诚以及副总裁兼智慧城市创新院院长邵钦豪等出席了交流会。 上海电科智能系统股份有限公司、卡斯柯信号有限公司、上海澳星照明电…

告别胆怯,大步向前,迎接新挑战!

告别胆怯,大步向前,迎接新挑战! “赤日炎炎似火烧,野田禾稻半枯焦。农夫心内如汤煮。公子王孙把扇摇。”读罢《水浒传》中的这一首七绝诗,受其感染,笔者也乘兴呤顺口溜四句抒怀:“烈日炎炎似火…

FlatBuffers 使用编译器

1、前言 可能刚接触的人会思考为啥要使用编译器: 一般跨平台、跨语言的都有一套固定的流程,大致可分为: 撰写IDL文件 -> 使用对应语言的编译器,编译成对应的语言 -> 序列化 ->持久化 -> 反序列化 这里就对应着这个…

Spring中IOC容器常用的接口和具体的实现类

在Spring框架没有出现之前,在Java语言中,程序员们创建对象一般都是通过关键字new来完成,那时流行一句话“万物即可new,包括女朋友”。但是这种创建对象的方式维护成本很高,而且对于类之间的相互关联关系很不友好。鉴于…

三言两语说透关于 MySQL2 和 MySQL 的区别

MySQL是最流行的开源关系型数据库管理系统,拥有大量的使用者和广泛的应用场景。而MySQL2是MySQL官方团队推出的新一代MySQL驱动,用于取代老版的MySQL模块,提供更好的性能和更丰富的功能。本文将介绍MySQL2相较于MySQL有哪些优势以及具体的技术区别。 My…

01 关于 ABAP RAP 模型

ABAP RAP 模型 概览 关于 RAP 专栏内容,是个人在 SAP 官方提供的课程学习后整理的文档。这些文档涉及部分对概念的理解。在这里,不做具体讲解,而是跟随后续实例开发教程,通过实际练习,让大家能够理解这些概念。 ABAP …

【Linux】多线程——生产者和消费者模型

目录 1 生活中的例子 2 为何要使用生产者消费者模型 3 生产者和消费者模型的特点 优点 4 如何理解生产消费模型提高了效率? 5 基于BlockingQueue(阻塞队列)的生产者消费者模型 C queue模拟阻塞队列的生产消费模型 1 生活中的例子 存在多个消费者&#xff0c…

pve安装ikuai并设置,同时把pve的网络连接到ikuai虚拟机

目录 前因 前置条件 安装ikuai 进入ikuai的后台 配置lan口,以及wan口 配置lan口桥接 按实际情况来设置了 单拨(PPOE拨号) 多拨(内外网设置点击基于物理网卡的混合模式) 后续步骤 pve连接虚拟机ikuai的网络以及其他虚拟机连接ikuai的网…

QT中日期和时间类

QT中日期和时间类 QDateQTimeQDateTime QDate QDate类可以封装日期信息也可以通过这个类得到日期相关的信息, 包括:年, 月, 日。 // 构造函数 QDate::QDate(); QDate::QDate(int y, int m, int d);// 公共成员函数 // 重新设置日期对象中的日期 bool QDate::setDate(int year…

【数据结构与算法】整合一

GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review 公众号:URLeisure 的复习仓库 公众号二维码见文末 以下是本篇文章正文内容,下面案例可供参考。 吐血整理数据结构合集一: 整理了之前发的文…

SpringBoot集成Thymeleaf

Spring Boot 集成 Thymeleaf 模板引擎 1、Thymeleaf 介绍 Thymeleaf 是适用于 Web 和独立环境的现代服务器端 Java 模板引擎。 Thymeleaf 的主要目标是为开发工作流程带来优雅的自然模板,既可以在浏览器中正确显示的 HTML,也可以用作静态原型&#xf…

华为云NFS使用API删除大文件目录

最近在使用华为云SFS时,如果一个目录存储文件数超过100W,执行 “rm -rf path”时,存在删不动的情况,可以使用华为云API接口,执行异步删除。 华为官网: 删除文件系统目录_弹性文件服务 SFS_API参考_SFS Tu…

八方锦程15周年巡讲重磅启动,上海首场巡讲圆满举行

7月27日,八方锦程15周年巡讲——“与行业大咖同行 打造卓越人力资源官”活动在上海圆满举行! 作为八方锦程15周年巡讲的第一站,这一时刻,近200位与会人力资源从业者共同见证。 活动由八方锦程人才研究院副院长Leon主持并致开幕词。他向与会人员分享了举办该系列活动的初心,以八…

Mybatis源码-三种SqlSession的区别

三个SqlSession DefaultSqlSession与SqlSessionManager 与SqlSessionTemplate 是我常见的3种sqlsesion 从类图可以看出他们三个都实现了了SqlSession,也就是他们都可以表示一个会话。与其他不同的是SqlSessionManager实现了SqlSessionFactory 这三种sqlsession的区…

Windows 找不到文件‘chrome‘。请确定文件名是否正确后,再试一次

爱像时间,永恒不变而又短暂;爱像流水,浩瀚壮阔却又普普通通。 Windows 找不到文件chrome。请确定文件名是否正确后,再试一次 如果 Windows 提示找不到文件 "chrome",可能是由于以下几种原因导致的&#xff1…

vmware中windows操作系统虚拟机安装

1.win10中安装 1.1 虚拟机向导 文件-新建虚拟机 典型-下一步 稍后安装操作系统-下一步 window10 64x -下一步 修改虚拟机名称及位置-下一步 默认60g,至少大于40g-将虚拟磁盘拆分成多个文件夹-下一步 点击完成 1.2 编辑虚拟机设置 移除打印机 设置虚拟机,加入iso映…

DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理)

1.Qt中实现服务器的原理&#xff1b; ---chatser.h---头文件 #ifndef CHATSER_H #define CHATSER_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //套接字类 #include <QMessageBox> //消息对话类 #include <Q…

机器学习深度学习——模型选择、欠拟合和过拟合

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——多层感知机的简洁实现 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有…

HHDESK便捷功能介绍三

1 连接便捷显示 工作中&#xff0c;往往需要设置很多资源连接。而过多的连接设&#xff0c;往往很容易混淆。 在HHDESK中&#xff0c;当鼠标点击连接时&#xff0c;会在下方显示本连接的参数&#xff0c;方便用户查看。 2 日志查看 实际工作中&#xff0c;查看日志是一件很…

干货 | 5个经典的模拟电路解析,电子人必看!

干货 | 5个经典的模拟电路解析&#xff0c;电子人必看&#xff01; 作为一个电子人&#xff0c;我们平时需要和不同的电路接触&#xff0c;但有一些电路图是经典的&#xff0c;值得我们永远记住。一、自举电路 此电路用在各种ADC之前的采样电路&#xff0c;可以让ADC实现轨到轨…