【问题标题】:(Pyinstaller, Torch) Exception: Most probably this dynlib/dll was not found when the application was frozen(Pyinstaller, Torch) 例外:当应用程序被冻结时,很可能没有找到这个 dynlib/dll
【发布时间】:2020-09-20 03:00:39
【问题描述】:

我正在尝试将导入 Torch 的 python 文件转换为可执行文件。当我将脚本作为 .py 文件运行时,它工作得非常好。

附加信息:

  • Python 版本:3.7
  • 火炬版本:1.5
    • pip install torch===1.5.0 torchvision===0.6.0 -f https://download.pytorch.org/whl/torch_stable.html)

如果您需要更多信息,请告诉我。

我的 SPEC 文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['B:\\boska\\Documents\\Dilan\\Dropbox\\Fiverr\\Jobs\\Work Files\\ank521\\Application.py'],
             pathex=['B:\\Downloads\\Python37\\Lib\\site-packages\\torch\\bin', 'B:\\boska\\Documents\\Dilan\\Dropbox\\Fiverr\\Jobs\\Work Exports'],
             binaries=[],
             datas=[],
             hiddenimports=['tkinter', 'sklearn.utils._cython_blas', 'sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree', 'sklearn.tree._utils', 'torch', 'numpy'],
             hookspath=[],
             runtime_hooks=[],
             excludes=['PySide2', 'PyQt5'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='Application',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Application')

我的错误信息:

【问题讨论】:

    标签: python-3.x dll pyinstaller torch


    【解决方案1】:

    我有同样的问题。以下是我的解决方法:

    首先,我通过运行以下命令检查了文件“caffe2_nvrtc.dll”的依赖关系:

    pyi-bindepend caffe2_nvrtc.dll
    

    我注意到另一个名为“nvcuda.dll”的 dll 丢失了,即没有包含在 pyinstaller 创建的 dist 目录中。

    因此,我修改了我的规范文件以添加此 dll,它位于“C:\Windows\System32”中。 只需在规范文件中添加以下行:

    MISSING_LIBS = (
    Path(r'C:\Windows\System32\nvcuda.dll'),
    )
    
    a.binaries += TOC([(lib.name, str(lib.resolve()),'BINARY') for lib in MISSING_LIBS])
    

    不清楚的看这个spec文件的example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多