问题描述
我正在创建一个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,因此可以使用,但容易出现安全问题,因为data目录中的python文件可用于注入任意代码(您无法对其进行任何控制)。您可能要考虑使用适当的软件包并更新PIP等使用的脚本。