我知道如何使用pyinstaller中的隐藏导入功能导入一个python库。如果我有多个 python 库(例如 pyautogui 和 pandas)怎么办?我如何隐藏导入它们? 我想它看起来像这样:
pyinstaller Pythonmain.py —hidden-import=‘pyautogui, pandas’
我确信这很简单,但我在任何地方都找不到答案。
您可以重复
--hidden-import
选项:
pyinstaller main.py -—hidden-import pandas --hidden-import pyautogui
来自文档,强调我的:
--隐藏导入模块名称
命名一个在脚本代码中不可见的导入。 可以使用此选项 多次.
如果您想使用一堆隐藏的导入,那么在
spec
文件中使用会很有效。在规范文件内容的顶部,以类似 all_libraries
的方式列出所需模块,然后定义隐藏的导入,如下例所示 -
from PyInstaller.utils.hooks import collect_submodules
all_libraries = [
"altgraph",
"certifi",
"charset-normalizer",
"et-xmlfile",
"idna",
"Jinja2",
"macholib",
"packaging",
"pandas",
"pyparsing",
"PySide6",
"PySide6_Addons",
"PySide6_Essentials",
"python-dateutil",
"pytz",
"setuptools",
"shiboken6",
"six",
"tzdata",
"urllib3"
]
hidden_imports = []
for l in all_libraries:
hidden_imports += collect_submodules(l)
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[('./resources/data', 'resources/data'), ('./resources/icons', 'resources/icons')],
hiddenimports=hidden_imports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['resources/icons/icon.png'],
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
strip=False,
upx=True,
upx_exclude=[],
name='main',
)
app = BUNDLE(
coll,
name='main.app',
icon='./resources/icons/icon.ico',
bundle_identifier=None,
)