我想要的是:将包含所有模块的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”
答案 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
然后使用
调用pyinstallerpyinstaller service.spec