在 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',
)



  1. 为每个单独的规范文件。
  2. 然后将它们组合成一个规范文件。
  3. 确保分析中的pathex正确并验证每个组件的 数据中的路径。
  4. 如果 exe 仍然加载缓慢,请尝试对 exe 进行签名。至此,我要为 EXE 添加数字签名。这将防止 windows 将 EXE 标记为威胁。