首页 > 解决方案 > 如何在保持 .py 源代码可编辑的同时将 python 打包为 exe?

问题描述

我正在创建一个 python 脚本,它应该修改自身并且是可移植的。

我可以分别实现这些目标中的每一个,但不能一起实现。

我使用 cx_freeze 或 pyinstaller 将我的 .py 打包为 exe,因此它是可移植的;但是我有很多 .pyc 编译文件,我无法从软件本身编辑我的 .py 文件。

有没有办法让脚本保持可移植性和轻量级(因此不能选择 70mb 的可移植 python 环境)但仍可编辑?

这个想法是有一种像 python.exe 这样的 exe“解释器”,但所有的库都链接,正如 pyinstaller 允许的那样,运行 .py 文件,所以 .py 脚本可以编辑自己或被其他脚本编辑,并且仍然由解释器执行。

标签: pythonpyinstallerexecutable

解决方案


首先定义您的主脚本(不能更改)main_script.py。在子文件夹(例如命名data)中创建patch_script.py

main_script.py

import sys
sys.path.append('./data')
import patch_script

子文件夹内:

data\patch_script.py

print('This is the original file')

在根文件夹中创建一个规范文件,例如通过运行pyinstaller main_script.py. 在 spec 文件中,将补丁脚本添加为数据资源:

     ...
     datas=[('./data/patch_script.py', 'data' ) ],
     ...

运行pyinstaller main_sript.spec。执行exe文件,它应该打印

This is the original file

编辑补丁脚本,例如说:

print('This is the patched file')

重新运行exe文件,它应该打印

This is the patched file

注意:由于这是一个 PoC,它可以工作,但容易出现安全问题,因为数据目录中的 python 文件可用于注入任意代码(您无法控制)。您可能需要考虑使用 PIP 等使用的正确软件包和更新脚本。


推荐阅读