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