pyinstaller给出“ ImportError:DLL加载失败”

时间:2019-09-14 13:26:15

标签: python bluetooth pyinstaller

当我运行使用pyinstaller从python编译为exe的程序时,会出现错误(我使用python 2.7.16):

if (choiceone.equalsIgnoreCase("1") || choiceone.equalsIgnoreCase("one"))
    {//Player 1 Choose "One"
        if (bone == false)
        {
            bone = true;
            p1t = false;
            p2t = true;

            one = "X ";

            System.out.println("BOARD--------");
            System.out.println(one + two + three);
            System.out.println(four + five + six);
            System.out.println(seven + eight + nine);
            System.out.println("BOARD--------");
        }
        else if (bone == true)
        {
            System.out.println("That space has allready been used. Turn Wasted");
            p1t = false;
            p2t = true;
            System.out.println("BOARD--------");
            System.out.println(one + two + three);
            System.out.println(four + five + six);
            System.out.println(seven + eight + nine);
            System.out.println("BOARD--------");
        }
    }//Player 1 Choose "One"

我用以下命令编译了它:

Traceback (most recent call last):
  File "bloepie.py", line 1, in <module>
  File "c:\users\stefan\appdata\local\temp\pip-install-v9ecuy\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
  File "build\bdist.win-amd64\egg\bluetooth\__init__.py", line 37, in <module>
  File "c:\users\stefan\appdata\local\temp\pip-install-v9ecuy\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
  File "build\bdist.win-amd64\egg\bluetooth\msbt.py", line 2, in <module>
  File "c:\users\stefan\appdata\local\temp\pip-install-v9ecuy\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
  File "build\bdist.win-amd64\egg\bluetooth\_msbt.py", line 7, in <module>
  File "build\bdist.win-amd64\egg\bluetooth\_msbt.py", line 6, in __bootstrap__
ImportError: DLL load failed: The specified module could not be found.
[21200] Failed to execute script bloepie

this person与我有相同的问题,但他得到的唯一遮阳篷是他应该升级到我不想做的python 3或更高版本,并且没有标记为正确的遮阳篷,所以我也不能保证如果我做到了,那就行得通。此人的问题略有不同。我有一个“导入错误:DLL无法加载:...”,他有一个正常的导入错误(我不知道这是否有区别,但我找不到任何东西)

这是我用pyinstaller编译的python代码:

pyinstaller bloepie.py --onefile

那么这里出了什么问题?为什么编译后的版本不运行(py文件工作正常) 谢谢

2 个答案:

答案 0 :(得分:2)

我尝试使用钩子,但是对于我的代码来说效果不佳。相反,我将整个scipy文件夹复制到python代码文件夹,并且此问题已解决。在我的计算机中,scipy文件夹位于"D:\Programe\Anaconda\Lib\site-packages"中。

希望它能为您提供帮助。

总而言之,我在使用pyinstaller的软件包中的提示如下所示:

  1. 需要在spec文件的开头添加以下代码:
import sys  
sys.setrecursionlimit(5000)
  1. 将高风险模块复制到打包文件夹中,以避免DLL丢失错误。 (在我的作品中,复制了Numpy,Scipy和Pandas。)

  2. 对于缺少模块等其他错误,您可以通过将模块添加到spec文件的隐藏导入中来解决该错误。

  3. 需要将Pandas更新到1.x.x版本。 Pandas 0.24.x版本将显示“没有名为'pandas._libs.tslib'的模块”,并且无法通过隐藏导入进行修复。

答案 1 :(得分:0)

为了强制pyinstaller添加缺少的dll,您可以在规范文件中添加binary hook。 spec文件由pyinstaller创建,以描述程序的构建方式。但是,当有一些dll时,仅通过分析您的代码就无法找到它们,因此您必须编辑此文件(documentation中有关此文件的更多信息)。

首先运行,然后可以编辑此文件,并在Analysis部分中添加类似于下一行的行。我使用伪造的dll从文档中编辑了示例:

a = Analysis(['minimal.py'],
     pathex=['/Developer/PItests/minimal'],
     binaries = [ ('C:\\path\\to\\the\\wbtapi.dll', 'dlls') ],
     datas=None,
     hiddenimports=[],
     hookspath=None,
     runtime_hooks=None,
     excludes=None,
     cipher=block_cipher)

但是没有包名,我无法更精确地

编辑:使用pybluez for win10,我认为您必须找到wbtapi.dll。我没有Windows 10,所以我不知道它在哪里。

编辑bis :更多说明。