我正在尝试制作一个脚本,该脚本将解码一些base64编码的python脚本,然后使用pyInstaller进行编译以创建一个.exe文件。 我的代码如下:
import base64
exec(base64.b64decode(b"aW1wb3J0IHRpbWUKd2hpbGUgVHJ1ZToKICAgIHByaW50KCJIZWxsbyBUaGVyZSIpCiAgICB0aW1lLnNsZWVwKDEpCg==""))
当我运行.py文件时,代码成功运行,但是当我将代码编译成.exe文件时,什么都没有发生。我看着任务管理器,即使等待了大约5分钟,我的过程甚至都没有打开。 我也尝试使用compile()编译代码,但还是没有运气。 对于任何想知道base64编码的字符串说的人:
import time
while True:
print("Hello")
time.sleep(1)
答案 0 :(得分:0)
这是一篇较旧的帖子,但我可以回答其他可能发现此问题的人的问题。
这里发生的事情是捆绑的可执行文件缺少 time 库。根据 PyInstaller 的网站:
<块引用>[Pyinstaller] 分析您的代码以发现您的脚本需要执行的所有其他模块和库。然后它收集所有这些文件的副本——包括活动的 Python 解释器! – 并将它们与您的脚本放在一个文件夹中,或者可以选择放在一个可执行文件中。
...
<块引用>您的脚本还需要哪些其他模块和库才能运行? (这些有时称为其“依赖项”。)
<块引用>为了找出答案,PyInstaller 会在您的脚本中查找所有导入语句。它会查找导入的模块并在其中查找导入语句,以此类推,直到它拥有您的脚本可能使用的模块的完整列表。
因为您在编码字符串中包含了导入语句,PyInstaller 无法找到 time 作为依赖项。因此,time 库不在执行代码的环境中。
要解决此问题,您可以执行以下 2 件事之一:
解决此问题的更简单方法是在导入 base64 库的外部代码中导入 time。
更难的方法是将整个 time 库存储在一个可执行的 Python 代码对象中,将其转换为 base64,并将其包含在您的其余内部代码中。