当我运行使用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文件工作正常) 谢谢
答案 0 :(得分:2)
我尝试使用钩子,但是对于我的代码来说效果不佳。相反,我将整个scipy文件夹复制到python代码文件夹,并且此问题已解决。在我的计算机中,scipy文件夹位于"D:\Programe\Anaconda\Lib\site-packages"
中。
希望它能为您提供帮助。
总而言之,我在使用pyinstaller的软件包中的提示如下所示:
import sys sys.setrecursionlimit(5000)
将高风险模块复制到打包文件夹中,以避免DLL丢失错误。 (在我的作品中,复制了Numpy,Scipy和Pandas。)
对于缺少模块等其他错误,您可以通过将模块添加到spec文件的隐藏导入中来解决该错误。
需要将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 :更多说明。