找不到 pyinstaller 隐藏导入

pyinstaller Hidden import not found

我正在使用 pyinstaller。在我的脚本中有:

import toml


config = toml.load('config.toml')

我用以下代码编译了我的脚本:

pyinstaller main.py --onefile --clean --name myApp

但是当我 运行 它给了我可执行文件时:ModuleNotFoundError: No module named 'toml'

所以我尝试了这个:

pyinstaller main.py --hidden-import toml --onefile --clean --name myApp

现在 pyinstaller 说:ERROR: Hidden import 'toml' not found

找到答案了。如果您使用的是虚拟环境(如 Pipenv、pyenv、venv),则需要在该环境的上下文中 运行 pyinstaller。所以...

pip install pyinstaller
python -m PyInstaller main.py ....

此外,正如 mosegui 指出的那样,您应该将配置标志放在文件名之前:

pyinstaller --hidden-import toml --onefile --clean --name myApp main.py

尽管这是很久以前的事了,我不确定这对我来说是否真的是个问题。

最近我使用 Poetry,所以一旦我有了 Poetry 环境,我就 poetry shell and/or poetry run pyinstaller ...。任何时候你使用 poetry run <some cmd sequence> 它 运行s 无论你的命令序列在当前虚拟环境的上下文中是什么。我相信 pipenv run 完成了类似的事情,但诗歌对我来说总是更好。

我知道这是一个迟来的回答,但我会在这里留下观察结果,以防有人发现 himself/herself 处于类似情况:

即使您安装了 tomlpyinstaller 也不会找到隐藏的导入,因为您是在脚本名称之后而不是之前传递配置标志,所以命令会执行到您的脚本名称并忽略其余部分。尝试:

pyinstaller --hidden-import toml --onefile --clean --name myApp main.py

而不是你现在的:

pyinstaller main.py --hidden-import toml --onefile --clean --name myApp