pyinstaller python脚本后没有模块命名错误

时间:2019-11-27 08:43:24

标签: python raspberry-pi pyinstaller

我想要的是:将包含所有模块的python文件转换为可执行文件并启动脚本。

问题:执行时,可执行文件没有提供没有名为signalrcore的模块

我已经有一个名为“ signalrcore”的模块,但是当我使用pyinstaller将python脚本转换为可执行文件时,它将无法正常工作。错误是没有名为signalrcore的模块。它仅与可执行文件一起出现。 python脚本工作正常。使用python2 python myscript.py->的脚本可以正常工作。但是python3 myscript.py->可执行文件有相同的错误。

我的python代码:

from signalrcore.hub_connection_builder import HubConnectionBuilder

print('TEST')

我的.spec文件:

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

block_cipher = None


a = Analysis(['service.py'],
             pathex=['/home/pi/Desktop/agent'],
             binaries=[],
             datas=[],
             hiddenimports=['signalrcore','signalrcore.hub_connection_builder'] ,

             hookspath=['/usr/lib/python2.7/dist-packages'],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='service',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False)

coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='service')

在将python代码编译为可执行文件(sudo pyinstaller service.spec)时弹出此错误

56429信息:分析隐藏的导入“ signalrcore”

56433错误:找不到隐藏的导入“ signalrcore”

56434信息:分析隐藏的导入'signalrcore.hub_connection_builder'

56438错误:找不到隐藏的导入“ signalrcore.hub_connection_builder”

1 个答案:

答案 0 :(得分:1)

问题似乎是,您仅为当前用户安装了signalrcore,而没有为root用户安装

有什么理由让您以root用户身份运行pyinstaller吗?

这不是必需的。

不使用sudo调用以下命令,然后查看输出。

python -c "import signalrcore ; print(signalrcore.__file__)"

它会向您显示Signalrcore模块的安装位置,我认为这是本地路径。

通常最好的方法是使用python virtualenv为特定任务设置特定的python设置。只要始终由一个用户(创建virtualenv的用户)执行pip安装,并且另一个用户仅使用virtualenv,这些虚拟环境便可以在用户之间共享。

我建议您尝试阅读有关virtualenvs的信息。 (https://virtualenv.pypa.io/en/latest/

非常简单的介绍

# install virtualenv
python -m pip install --user virtualenv  

# create a virtualenv
python -m virtualenv /path/to/virtualenv  # e.g /home/pi/virtualenv4service

# activate virtualenv
source /path/to/virtualenv/bin/activate

pip install signalrcore
pip install pyinstaller
pip install any_other_module_you_need

然后使用

调用pyinstaller
pyinstaller service.spec