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

文章介绍了pyc和pyd文件的生成过程,pyc文件用于提高加载速度,部分源码可读,而pyd文件提供更好的保密性,是编译后的二进制动态链接库。生成pyd文件需要C++编译器支持,且使用时需更名以匹配原py文件。两者在保密性和使用上有显著差异。
摘要由CSDN通过智能技术生成

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)引用了其他模块,也不要紧。这种方式是我比较喜欢的。点赞!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

George1415926

看着有用,请作者喝杯咖啡啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值