pyinstaller其实已经很好,但是这里存在一些问题,因为我们希望可以保护好源代码。
一般使用cython编译py文件为pyd,然后我们使用pyinstaller的时候,他是优先pyd的
这里存在很多问题。即使正常打包和运行,还要检查是否真正的打包了pyd,还是仍然打包的是pyc
pyc在补码以后是可以直接还原为源代码的。所以这个安全性是比较差的。
因为python本身运行就比较慢。如果再加一个强壳的话,这样速度就太差了。
下面引入细节问题,
未编译成pyd前,打包可以正常的运行,但编译了pyd以后打包的exe总是提供import XXX找不到。
这个问题困扰很久,最终试出答案。
我们假如编译了多个pyd。同时pyd之间还有一些import关系的话,直接使用pyinstaller的话,会漏掉很多文件。
因此很简单的方法是。如果发现生成的exe缺少某模块,可以在主load.py中
显式的import这个模块。
同时多个pyd也必须引用。这样pyinstaller就可以将这些依赖全部的打包。
使程序正常运行了。
如果对你的帮助,欢迎留言。
例子:
#下面这些import主文件其实并未使用,但是必须要显式的import否则漏文件
import base64
import hashlib
import requests
import time
import datetime
import uuid
import urllib.parse
import sys
import io
import os
import json
from urllib import parse
import hmac
#下面两个是pyd文件,即使不使用也要import,否则会漏文件
import aliyun_token
import aliyun_tts_NY
if __name__ == '__main__':
argv = sys.argv
# print(type(argv))
aliyun_tts_NY.main(argv)