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

文章目录

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

0. 背景

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

1. pyc文件的生成

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

""" 
@author:George 
@file: Calcupart.py 
@time: 2023/07/25 
@e-mail:[email protected]
"""

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:[email protected]
"""
import py_compile

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

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

不过,需要说明的是,如果打开pyc文件可以发现,有部分源代码还是可以看见的。
Python生成pyc以及pyd文件的方法_第2张图片

以上,便是单个文件编译成*.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"这个工具(具体方式可以参考这里),然后安装如下组件:
Python生成pyc以及pyd文件的方法_第3张图片
最后,在重新再控制台运行上述命令即可。pyd文件将会出现在项目文件夹下的build——>lib.win-amd64-cpython-38文件夹里,我这边的名称是Calcupart.cp38-win_amd64.pyd

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

3. 两者的异同

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

你可能感兴趣的:(Python,Pycharm,python,开发语言)