在尝试为使用 patoolib(版本 1.12)提取存档文件(例如 ZIP、RAR)的 Python 脚本创建可执行 (.exe) 文件时,我遇到了一个特殊问题。当作为 .py 文件执行时,该脚本运行完美,但在尝试使用 PyInstaller 等工具创建可执行文件时遇到错误。我收到的错误消息是:
没有名为“patolib.programs”的模块
以下是我的设置的具体信息:
Python版本:3.11.4
patolib版本:1.12
操作系统:Windows 10
创建可执行文件的命令(PyInstaller):
pyinstaller my_script.py --onefile
我尝试了各种方法来解决此问题,包括:
尽管进行了这些尝试,但在尝试执行 .exe 文件时,我仍然遇到“没有名为 'patolib.programs' 的模块”错误。
是否有其他人在 Windows 上遇到过 patoolib 1.12 版的类似问题?如果有,采取了哪些步骤来解决该问题?任何有关解决此问题的见解或指导将不胜感激。谢谢!
如果您在尝试使用 patoolib(版本 1.12)为 Python 脚本创建可执行 (.exe) 文件时遇到“没有名为 'patoolib.programs' 的模块”错误,并且您希望避免使用 --hidden-import,则您可以可以尝试使用 PyInstaller .spec 文件中的 datas 选项包含必要的模块。具体方法如下:
生成.spec文件:
首先,确保您已为 Python 脚本生成了 .spec 文件。如果您还没有创建它,请使用以下命令创建它(将 my_script.py 替换为您的脚本名称):
pyinstaller --name my_script --onefile my_script.py
此命令将在与脚本相同的目录中创建一个 .spec 文件。
打开.spec文件:
在文本编辑器中打开生成的 .spec 文件(例如 my_script.spec)。
找到分析部分:
在 .spec 文件中,找到“分析”部分,其中列出了要包含在可执行文件中的模块和依赖项。它应该看起来像这样:
a = Analysis(
['my_script.py'],
pathex=['/path/to/your/script'],
binaries=[],
datas=[],
# ...
)
使用数据指定“patolib.programs”模块:
要包含 patoolib.programs 模块,您可以在数据列表中将其指定为元组。在“分析”部分添加以下行:
datas=[('path/to/patoolib', 'patoolib')]
将 'path/to/patolib/programs.py' 替换为 patoolib 包中的programs.py 文件的实际路径。
保存.spec文件:
保存对 .spec 文件所做的更改。
重建可执行文件:
最后,使用修改后的 .spec 文件重建可执行文件:
pyinstaller my_script.spec
此命令将创建一个具有更新的依赖项的新可执行文件,包括 patoolib.programs。
通过在 .spec 文件的 datas 选项中指定“patolib.programs”模块,您应该能够在使用 PyInstaller 为 Python 脚本创建可执行文件时解决“没有名为“patolib.programs”的模块”错误,而无需使用需要 --hidden-import。