加密打包
程序加密打包方案(pyinstaller)
第一步:安装pyinstaller
pip install pyinstaller
第二步:创建打包配置文件(spec文件)
pyi-makespec specname
这种spec生成的dist文件夹会有依赖文件和exe
pyi-makespec -F specname
将依赖文件一并压到exe文件中
第三步:编辑配置文件
一、配置文件四大实例对象作用:
- Spec 文件中的语句会创建四个类的实例:
Analysis
、PYZ
、EXE
和COLLECT
。
- 一个类
Analysis
的新实例将脚本名称列表作为输入。它会分析所有导入和依赖关系。生成的对象(赋值给a
)在类成员中包含依赖列表:
scripts
:命令行中指定的 Python 脚本;pure
:脚本所需的纯 Python 模块;pathex
:用于搜索导入的路径列表(比如使用PYTHONPATH
)。binaries
:脚本所需的非 Python 模块。datas
:应用程序中包含的非二进制文件。- 类
PYZ
的实例是一个.pyz
归档文件(在检视归档中描述),它包含a.pure
中的所有 Python 模块。- 根据分析的脚本和
PYZ
归档创建一个EXE
实例。该对象创建可执行文件。二、一般需要配置的内容:
1.Analysis第一个script参数是需要加密的py文件(列表)。
2.binaries存放的是二进制文件(DLL、动态链接库、共享对象文件等)。
3.datas存放的是类似图像、PDF、txt这样的文件,打包后保持原样不会转为二进制。使用 spec 文件时,提供一个文件路径列表作为
Analysis
的datas=
参数值。数据文件列表是一个元组列表,每个元组由两个字符串类型的值组成:
- 首个字符串指定当前系统中的一个或多个文件。
- 第二个指定文件在运行时位于的文件夹名称。
例如:
a = Analysis(... datas=[ ('src/README.txt', '.') ], ... )
三、配置文件如下:
a = Analysis(
[script.py]
,
pathex=[],
binaries=[]
,
datas=[]
,
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name=‘your_script’,
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
第四步:生成可执行文件
用spec生成
exe
文件
pyinstaller xxx.spec
tips:在生成可执行文件时,会同时生成build和dist两个文件夹。
1.
build
文件夹:
build
文件夹是PyInstaller
在打包过程中生成的临时文件夹,用于存放打包过程中生成的中间文件和构建工件。- 这些文件可能包括一些临时的Python模块、构建脚本以及其他与构建过程相关的文件。
build
文件夹在打包完成后通常可以安全删除,因为它只是用来辅助构建过程的中间产物,不影响最终生成的可执行文件的运行。2.
dist
文件夹:
dist
文件夹是PyInstaller
在打包过程中生成的最终输出文件夹,用于存放最终生成的可执行文件以及其相关的依赖项。- 当
PyInstaller
成功打包并生成可执行文件时,它会将最终的可执行文件以及所有必要的依赖项放置在dist
文件夹中。dist
文件夹中的内容即为最终用户需要的文件,您可以将整个文件夹进行分发或分享给其他人,以便他们可以运行您的Python程序。
第五步:删除加密过的代码并运行可执行文件
删除加密过的代码后,在dist文件夹中找到
exe
文件执行。
cd dist
./xxx
dockerfile相关片段示例
#打包成为二进制文件,生成到 /data-tranfer/dist/(前提是已经有生成好的spec文件)
RUN pyinstaller xxx.spec
#删除不必要的源文件
RUN rm -rf /data-transfer/src \
&& rm -rf /data-transfer/settings \
&& rm -rf /data-tranfer/build
CMD [“./dist/xxx”]