在 Pyinstaller 中使用 Merge 方法时找不到错误 python38.dll
Error python38.dll not found while using Merge method in Pyinstaller
我有两个 EXE,比方说 one.exe 和 two.exe,它们是使用 Pyinstaller(作为 --onefile)创建的。 one.exe(大小为 74 MB)在执行时调用 two.exe(大小为 50 MB)。由于这些是捆绑的 EXE,因此他们首先将所有文件提取到临时文件夹,然后再使用它们。所以在 运行 one.exe 上,解绑和启动实际程序大约需要 40 秒,然后在 one.exe 调用 two.exe 之后,又需要 40 秒。我正在尝试降低 exe 的加载时间,因此,我正在使用 Merge 方法合并两个 EXE 的规范文件,并使用 Link . I also followed this Link 中提到的共享资源来尝试不同的东西来获得它工作但 two.exe 无法使用共享 python.dll 我能够成功创建 exe 但在 运行 之后 two.exe 它给了我这个错误,我怎么办让它发挥作用。
如有任何帮助,我们将不胜感激。
这是我使用的规范文件:
la_block_cipher = None
la_options = [('W ignore', None, 'OPTION') ]
da_block_cipher = None
la = Analysis(['C:\Rohith\python\ONE.py'],
pathex=['C:\Rohith\python'],
binaries=[],
datas=[
('C:\Rohith\python\ONE.py','.'),
('C:\Rohith\python\pages','pages'),
('C:\Rohith\python\static','static'),
],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['PySide', 'asyncio', 'curses', 'overlapped', 'PyQt4', 'scipy', 'matplotlib', 'tornado', 'MySQLdb', 'psycopg2', 'win32com','tkinter','PyQt6','PyQt5'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=la_block_cipher,
noarchive=False)
da = Analysis(['C:\Rohith\python\TWO.py'],
pathex=['C:\Rohith\python'],
binaries=[],
datas=[
('C:\Rohith\python\TWO.py','.'),
('C:\Rohith\python\pages','pages'),
('C:\Rohith\python\static','static'),
],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['PySide', 'PyQt4', 'scipy', 'matplotlib', 'tornado', 'MySQLdb', 'psycopg2', 'win32com','tkinter','PyQt6','PyQt5'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=da_block_cipher,
noarchive=False)
MERGE((la, 'ONE', 'ONE'),(da, 'TWO', 'TWO'))
la_pyz = PYZ(la.pure, la.zipped_data,
cipher=la_block_cipher)
da_pyz = PYZ(da.pure, da.zipped_data,
cipher=da_block_cipher)
la_exe = EXE(la_pyz,
la.scripts,
la.binaries,
la.zipfiles,
la.datas,
[],
name='ONE',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
# -*- mode: python ; coding: utf-8 -*-
da_exe = EXE(da_pyz,
da.scripts,
da.binaries,
da.zipfiles,
da.datas,
[],
name='TWO',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
coll = COLLECT(la_exe,
la.binaries,
la.zipfiles,
la.datas,
da_exe,
da.binaries,
da.zipfiles,
da.datas,
strip=False,
upx=True,
upx_exclude=[],
name='Combined_Foo',
)
- 为每个单独的规范文件。
- 然后将它们组合成一个规范文件。
- 确保分析中的pathex正确并验证每个组件的
数据中的路径。
- 如果 exe 仍然加载缓慢,请尝试对 exe 进行签名。至此,我要为 EXE 添加数字签名。这将防止 windows 将 EXE 标记为威胁。
我有两个 EXE,比方说 one.exe 和 two.exe,它们是使用 Pyinstaller(作为 --onefile)创建的。 one.exe(大小为 74 MB)在执行时调用 two.exe(大小为 50 MB)。由于这些是捆绑的 EXE,因此他们首先将所有文件提取到临时文件夹,然后再使用它们。所以在 运行 one.exe 上,解绑和启动实际程序大约需要 40 秒,然后在 one.exe 调用 two.exe 之后,又需要 40 秒。我正在尝试降低 exe 的加载时间,因此,我正在使用 Merge 方法合并两个 EXE 的规范文件,并使用 Link . I also followed this Link 中提到的共享资源来尝试不同的东西来获得它工作但 two.exe 无法使用共享 python.dll 我能够成功创建 exe 但在 运行 之后 two.exe 它给了我这个错误,我怎么办让它发挥作用。
如有任何帮助,我们将不胜感激。
这是我使用的规范文件:
la_block_cipher = None
la_options = [('W ignore', None, 'OPTION') ]
da_block_cipher = None
la = Analysis(['C:\Rohith\python\ONE.py'],
pathex=['C:\Rohith\python'],
binaries=[],
datas=[
('C:\Rohith\python\ONE.py','.'),
('C:\Rohith\python\pages','pages'),
('C:\Rohith\python\static','static'),
],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['PySide', 'asyncio', 'curses', 'overlapped', 'PyQt4', 'scipy', 'matplotlib', 'tornado', 'MySQLdb', 'psycopg2', 'win32com','tkinter','PyQt6','PyQt5'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=la_block_cipher,
noarchive=False)
da = Analysis(['C:\Rohith\python\TWO.py'],
pathex=['C:\Rohith\python'],
binaries=[],
datas=[
('C:\Rohith\python\TWO.py','.'),
('C:\Rohith\python\pages','pages'),
('C:\Rohith\python\static','static'),
],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['PySide', 'PyQt4', 'scipy', 'matplotlib', 'tornado', 'MySQLdb', 'psycopg2', 'win32com','tkinter','PyQt6','PyQt5'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=da_block_cipher,
noarchive=False)
MERGE((la, 'ONE', 'ONE'),(da, 'TWO', 'TWO'))
la_pyz = PYZ(la.pure, la.zipped_data,
cipher=la_block_cipher)
da_pyz = PYZ(da.pure, da.zipped_data,
cipher=da_block_cipher)
la_exe = EXE(la_pyz,
la.scripts,
la.binaries,
la.zipfiles,
la.datas,
[],
name='ONE',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
# -*- mode: python ; coding: utf-8 -*-
da_exe = EXE(da_pyz,
da.scripts,
da.binaries,
da.zipfiles,
da.datas,
[],
name='TWO',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
coll = COLLECT(la_exe,
la.binaries,
la.zipfiles,
la.datas,
da_exe,
da.binaries,
da.zipfiles,
da.datas,
strip=False,
upx=True,
upx_exclude=[],
name='Combined_Foo',
)
- 为每个单独的规范文件。
- 然后将它们组合成一个规范文件。
- 确保分析中的pathex正确并验证每个组件的 数据中的路径。
- 如果 exe 仍然加载缓慢,请尝试对 exe 进行签名。至此,我要为 EXE 添加数字签名。这将防止 windows 将 EXE 标记为威胁。