无法让 .exe 在其他机器上执行 - "No module named serial" 错误
Can't get .exe to execute on other machine - "No module named serial" error
System: Python 3.7 64x 运行 on Windows 10. 我的机器上也安装了 Anaconda,我通过 VS 编程代码。所有模块都已安装、验证安装并且是最新的。
我已经编写了一个脚本并使用 pyinstaller 将其编译为 .exe。 pyinstaller -wFi pyico.ico endpointapp3.py
.exe 可以在我的机器上运行,但不适用于我的电脑。此脚本的先前迭代已在其目标计算机上编译、测试并正常运行,目标计算机是未安装 python 的 Windows 7 计算机。
我的最新版本现在包括 pyserial,并且可以在我的机器上再次运行,但是我在为目标机器编译和创建 .exe 文件后遇到了这个错误。
File "endpointapp2.py", line 9 in <module>
ModuleNotFoundError: No module named 'serial'
[3512] Failed to execute script endpointapp2.py
第 9 行是我的 import serial
行
正如我之前提到的,这个可执行文件在我的机器上运行,但不能在它设计的目标机器上运行。我不想在目标机器上安装 python 或 python 模块,因为我希望 .exe 包罗万象。
问题:
- 为什么会出现此错误?这是什么意思?
- 是否有一种变通方法可以让我将所有内容编译在一起(使用 pyinstaller)以容纳所有必要的模块
.exe 中的信息?
- 还有什么我应该添加到我的原始脚本中的东西可以让我解决这个问题吗?
NOT A DUPLICATE - 这个 post 用于编译 运行 python .exe 在另一台机器上,独立于 python,没有模块或 python已安装。
在一些帮助和有用的建议(感谢 martineau)的帮助下,我能够解决我的问题。当使用 pyinstaller 编译时,它会生成一个 .spec 文件,它实际用于编译为 .exe。
Here 我找到了确保添加 pyinstaller 所需文件的必要步骤。
Here 我发现了如何将模块信息正确地添加到我的编译代码中。
一旦 pyinstaller 在 .spec 文件中有了正确的信息,我就能够按预期在目标机器上编译和执行。
模块调用pyserial
,但代码中的库调用是import serial
。 Pyinstaller 无法完成构建,因为确实没有名为 serial
.
的模块
要更正此问题,您需要通过将其包含在 hiddenimports 下的 .spec 文件中来告诉 pyinstaller 导入正确的包。
hiddenimports=['pyserial']
对于包名称和导入语句调用不同的任何情况都是如此。
System: Python 3.7 64x 运行 on Windows 10. 我的机器上也安装了 Anaconda,我通过 VS 编程代码。所有模块都已安装、验证安装并且是最新的。
我已经编写了一个脚本并使用 pyinstaller 将其编译为 .exe。 pyinstaller -wFi pyico.ico endpointapp3.py
.exe 可以在我的机器上运行,但不适用于我的电脑。此脚本的先前迭代已在其目标计算机上编译、测试并正常运行,目标计算机是未安装 python 的 Windows 7 计算机。
我的最新版本现在包括 pyserial,并且可以在我的机器上再次运行,但是我在为目标机器编译和创建 .exe 文件后遇到了这个错误。
File "endpointapp2.py", line 9 in <module>
ModuleNotFoundError: No module named 'serial'
[3512] Failed to execute script endpointapp2.py
第 9 行是我的 import serial
行
正如我之前提到的,这个可执行文件在我的机器上运行,但不能在它设计的目标机器上运行。我不想在目标机器上安装 python 或 python 模块,因为我希望 .exe 包罗万象。
问题:
- 为什么会出现此错误?这是什么意思?
- 是否有一种变通方法可以让我将所有内容编译在一起(使用 pyinstaller)以容纳所有必要的模块 .exe 中的信息?
- 还有什么我应该添加到我的原始脚本中的东西可以让我解决这个问题吗?
NOT A DUPLICATE - 这个 post 用于编译 运行 python .exe 在另一台机器上,独立于 python,没有模块或 python已安装。
在一些帮助和有用的建议(感谢 martineau)的帮助下,我能够解决我的问题。当使用 pyinstaller 编译时,它会生成一个 .spec 文件,它实际用于编译为 .exe。
Here 我找到了确保添加 pyinstaller 所需文件的必要步骤。
Here 我发现了如何将模块信息正确地添加到我的编译代码中。
一旦 pyinstaller 在 .spec 文件中有了正确的信息,我就能够按预期在目标机器上编译和执行。
模块调用pyserial
,但代码中的库调用是import serial
。 Pyinstaller 无法完成构建,因为确实没有名为 serial
.
要更正此问题,您需要通过将其包含在 hiddenimports 下的 .spec 文件中来告诉 pyinstaller 导入正确的包。
hiddenimports=['pyserial']
对于包名称和导入语句调用不同的任何情况都是如此。