关于将py编译成pyd再打包exe的思考

      为了保护源码,防止反编译,有时候会先将py编译成pyd,再使用pyinstaller进行打包。根据现有资料,已知被编译成pyd的文件它们所导入的模块,在打包时不会被引入,所以需要一个.py格式的入口文件,将这些pyd文件导入的模块在入口文件中import进来。

      关于这些我今天思考了一个问题,我有这样一个项目,有入口main.py,模块a.py、 b.py、 c.py。引用关系是这样的:

 1. main导入a,在a中直接执行主程序代码,main只是为了后续导入模块而服务的;

2. a导入并执行写在b和c当中的两个类;

3. b是写好的一个类,c导入b并继承了这个类,进行了一些属性和方法的修改。

        关于上述引用关系,我想证明只要在main.py中导入了 a、b、c三个文件和它们本身用到的库,程序就可以跑,不需要过多考虑a、b、c之间的相互导入关系(想多了费脑筋,操作起来越简单越好)。

        为了这明这个猜想,我进行了测试。我将abc三个文件编译成pyd,然后在main.py中导入了它们,和它们依赖的库,唯一需要注意的是a是执行主程序的,所以我把导入a放在了最后,确保其他模块先加载完成,再执行a,避免报变量未定义的错。

        经测试,按照上述方法导入文件,打包出来的程序可以正常运行,说明只要在入口按照程序执行顺序导入这些文件和它们依赖的库,就可以在内存中加载到这些方法属性。至于后面这些文件之间,他们是怎么相互调用的,在写py文件的时候捋清楚就可以了。在打包阶段可以将问题简化为:一共有哪些文件要导入,通通导入到入口的py文件,然后跑主程序是哪一个,将它放到最后导入即可。

      上述的简化思维只适用于只有一个文件调用运行其他所有文件的情况,如果有其他更复杂的执行结构,则需要更多地注意导入顺序,总之就是应避免变量未定义的错误。

       以上纯属个人经验之谈,如有谬误,请批评指正。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杜松霖_

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值