Python:防止被别人反编译读取自己写的代码——通过py转变成pyd及打包报错解决方法(20220407)

我在网上看了很多的文献,掉进了很多坑。下面,自己总结成大白话的步骤,方便大家来操作。

【【【准备工作】】】

      1.自己写好的主程序:my_assistant.py (不能为中文名字,否则会失败)

      2. 将py转变成pyd的程序:build_pyd.py(自己创建一个build_pyd.py,粘贴下图片中代码)  

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name='any words.....',
    ext_modules=cythonize("my_assistant.py"),
)

          # 注意!

                ①. 我是python3.7,所以是需要安装 Visual Studio 2019;python3.5以上的都可以用2019版,其他python版本请自行百度;

                ②.安装图片上的这两个,python 本机开发工具默认不选,自己选上!

       3.面向客户的程序:client_service.py (自己创建一个client_service.py,粘贴下面代码;需要注意的是:如果my_assistant.py引用了其他包,比如import time, import os 等等,这些都要在本程序前面列示!下面代码中仅以import time 作为示例。)

from my_assistant import *
import time # 根据自己实际情况填写


if __name__ == '__main__':
    if args.input is None:
        print('找不到对象')
    else:
        my_assistant(args.input, args.output)

            提示:① 本文运用  pyinstaller 打包成 exe 。

                       ② 不知道为什么这块代码会报错,但是能正常运行主程序(my_assistant.py),所以暂且忽略了。

        4.自己做好的图标 (一定是ico格式的图片,我准备的是 00001_7.ico 文件)

        5.把这些放进一个文件夹里,我是在桌面创建一个叫 ‘我的小助手’ 的文件夹,把上述1-4的内容都放了进去。

【【【 准备工作结束后,在管理员模式下运行 windowsPowerShell,开始运行下面的代码】】】

第一步:将主程序的  包路径包含:site-packages 的单独提出来(就是网上文献所谓的第三方包的文件夹拷贝过来)

        提问:什么是第三方包?

        答:以我为例,我自己是先装的Anaconda3后安装的Pycharm。我理解是引用的包不在Anaconda3\Lib 路径下,都算第三方包,都需要找到路径后,复制、粘贴到‘我的小助手’文件夹中。提示下,需要将使用的整个第三方包文件夹复制粘贴过来,不要只复制粘贴你所使用的第三方单个py文件。

第二步:复制粘贴 build_pyd.py ; client_service.py 到我的小助手的文件夹里面

(再次提示!client_service.py里面包含my_assiatant.py引用的各种包,比如上面的import time)

第三步:在windowsPowerShell输入代码:  cd C:\Users\x\Desktop\我的小助手  

第四步:在windowsPowerShell输入: python build_pyd.py build_ext --inplace

第五步:生成文件 xxx.cp35-win_amd64.pyd ,手动将其重命名为xxx.pyd

第六步:手动删除build文件夹; 删除my_assistant.py(我删了,不知道不删好使不)

第七步:输入:  pyinstaller -p docx\api.py  -i 00001_7.ico client_service.py         

             #提示  ①pyinstaller -p之间有空格!

                        ②因为自己引用了docx\api.py 第三方包,所以这么写代码,请根据你自己实际情况填写此处代码!

             # 因为最后生成的文件太大,所以我没写上 -F,写上后,最后生成的是一个exe程序,不是一个里面什么都有的文件夹。

第八步:在生成的dist文件夹里面找 client_service.exe

【【【 后续打包报错,持续更新...】】】

        问题1:打包包含cv2库的代码,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错:ImportError: OpenCV loader: missing configuration file: [‘config.py‘]. Check

        解决方法:在原来代码的最后,加上 

        --paths="C:\ProgramData\Anaconda3\Lib\site-packages\cv2"(具体路径根据自己电脑定)

# 根据前面的例子,在最后加上一段代码
pyinstaller -p docx\api.py  -i 00001_7.ico client_service.py --paths="C:\ProgramData\Anaconda3\Lib\site-packages\cv2"

         如果最后打包打开 exe程序,还是一闪而过,上述代码没有起到效果,用手机录视频,发现报错的最后几行如下:

ImportError: OpenCV loader: missing configuration file: ['config.py']. Check OpenCV installation.

        复制、粘贴 cv2文件里的所有内容到 打包成exe 同级目录下的 cv2文件夹里。

        问题2:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:

 File "subprocess.py", line 800, in __init__
 File "subprocess.py", line 1207, in __execute__child
FileNotFoundError: [WinError 2] 系统找不到指定的文件。

        解决方法:注释掉 paddle\dataset\image.py 的几行代码,之后再进行打包(多次确认有没有注释掉,因为属于库的代码,所以会提示修改不了等情况),具体方法参考这篇文章的 “ 二、关闭线程(很重要)”部分,地址:成功解决-PaddleOCR打包exe--Pyinstaller_aqqwvfbukn的博客-CSDN博客_paddleocr打包一、首先在虚拟环境中能够成功运行,二、关闭 多进程,否则当运行exe时电脑会有10多个 main.exe 进程,电脑内存占用直接90%。找到所在环境下的 image.py 文件我的是“D:\virtualenv\OCR\Lib\site-packages\paddle\dataset\image.py”把这一部分代码 注释掉```pythonif six.PY3: import subprocess import sys import_cv2_proc = subprhttps://blog.csdn.net/aqqwvfbukn/article/details/120553124?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164924304616782184624292%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164924304616782184624292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-120553124.142^v5^pc_search_insert_es_download,157^v4^control&utm_term=%E6%89%93%E5%8C%85paddleocr+subprocess.py&spm=1018.2226.3001.4187

        问题3:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:

  File "paddle\fluid\core.py", line 294, in <module>
  File "paddle\fluid\core.py", line 256, in <module>
ImportError: DLL load failed: 找不到指定的模块。

        解决方法:进行以下四步操作:1.复制、粘贴 paddle文件夹下的所有.py文件 到打包成exe 同级目录下的 paddle文件夹下。2.复制、粘贴 paddle\fluid 文件夹 到打包成exe 同级目录下的 paddle文件夹下。3.复制、粘贴 paddle\distributed 文件夹 到打包成exe 同级目录下的 paddle文件夹下。4.复制、粘贴    paddle\libs 里的所有文件 到打包成exe 同级目录下。

        问题4:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:

  File "ppocr\utils\e2e_utils\pgnet_pp_utils.py", line 25, in <module>
ModuleNotFoundError: No module named 'extract_textpoint_slow'

        解决方法:进行以下两步操作:1.复制、粘贴 paddleocr\ppocr 文件夹 到打包成exe 同级目录下。2.复制、粘贴 paddleocr\ppstructure 文件夹 到打包成exe 同级目录下。(注意:这两步都不需要在exe 同级目录下创建paddleocr,直接复制粘贴ppocr和ppstructure文件夹即可。)

  • 0
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

幻想·阳光

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值