2

我正在使用 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

4

2 回答 2

4

找到了答案。如果您使用的是虚拟环境(如 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和/或poetry run pyinstaller .... 无论您何时使用poetry run <some cmd sequence>它,它都会在当前虚拟环境的上下文中运行您的命令序列。我相信pipenv run完成了类似的事情,但诗歌总是对我更好。

于 2019-07-26T22:32:35.757 回答
0

我知道这是一个很晚的答案,但我会在这里留下一个观察,以防有人发现自己处于类似情况:

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

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

而不是您当前的:

pyinstaller main.py --hidden-import toml --onefile --clean --name myApp
于 2020-07-10T07:42:00.650 回答