python - 如何在保持 .py 源代码可编辑的同时将 python 打包为 exe?
问题描述
我正在创建一个 python 脚本,它应该修改自身并且是可移植的。
我可以分别实现这些目标中的每一个,但不能一起实现。
我使用 cx_freeze 或 pyinstaller 将我的 .py 打包为 exe,因此它是可移植的;但是我有很多 .pyc 编译文件,我无法从软件本身编辑我的 .py 文件。
有没有办法让脚本保持可移植性和轻量级(因此不能选择 70mb 的可移植 python 环境)但仍可编辑?
这个想法是有一种像 python.exe 这样的 exe“解释器”,但所有的库都链接,正如 pyinstaller 允许的那样,运行 .py 文件,所以 .py 脚本可以编辑自己或被其他脚本编辑,并且仍然由解释器执行。
解决方案
首先定义您的主脚本(不能更改)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 等使用的正确软件包和更新脚本。
推荐阅读
- unit-testing - Jest unit-testing if super() is called
- firebase - 用于检查角色或公司的 Firestore 规则功能
- python - 更改代码后权限被拒绝
- wordpress - 自定义帖子类型的 Ajax 过滤器
- android - 尝试在 Android Studio 中构建 SMS 应用时出现“访问被拒绝”错误
- ios - iPhone X - UIPageControl 黑条
- git - GIT 分支——我们可以只靠一个主人生存吗?
- c# - 使用 app.config 动态更改 Windows 服务上的 Web 服务 URL
- nativescript - 在 NativeScript 布局中居中和右/左对齐项目
- javascript - D3js单横条三种颜色