如何在物联网设备上安装gRPC python包?

2024-04-26 12:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个物联网设备(Android设备)和一些python脚本,可以与运行在同一设备上的gRPC服务器(作为Android应用程序)进行交互。我已经交叉编译了Python3,总体来说它是可以工作的——我能够从Android应用程序运行一些python脚本(使用Runtime.getRuntime().exec(...)并传递PATHPWDPYTHONHOMEPYTHONPATHANDROID_DATAANDROID_ROOT环境变量)

使用gRPC的python脚本如下所示:

...
import gprc

...

channel = grpc.insecure_channel(url)

执行脚本时,我会出现以下错误:

import error: No module named 'grpc'

以下是IoT设备上python目录的结构(我已经准备好了):

├── bin
├── lib
│   ├── pkgconfig
│   ├── python3.9
│   │   ├── asyncio
│   │   ├── collections
│   │   ├── concurrent
│   │   ├── ctypes
│   │   ├── curses
│   │   ├── dbm
│   │   ├── distutils
│   │   ├── encodings
│   │   ├── ensurepip
│   │   ├── html
│   │   ├── http
│   │   ├── idlelib
│   │   ├── importlib
│   │   ├── json
│   │   ├── lib-dynload
│   │   ├── lib2to3
│   │   ├── logging
│   │   ├── multiprocessing
│   │   ├── pydoc_data
│   │   ├── site-packages
│   │   ├── sqlite3
│   │   ├── tkinter
│   │   ├── turtledemo
│   │   ├── unittest
│   │   ├── urllib
│   │   ├── venv
│   │   ├── wsgiref
│   │   ├── xml
│   │   └── xmlrpc
│   └── site-packages
│       ├── google
│       ├── grpc
│       ├── grpcio-1.30.0.dist-info
│       └── protobuf-3.12.2.dist-info
└── share
    ├── man
    │   └── man1
    └── terminfo
         ...

正如您所看到的,我已经将相关包放到了site-packages(只需将相同的文件从我的mac机器复制到iot设备,这可能是不正确的)

正确的方法是什么(我应该把相关的lib放在哪里,具体放什么到pythondirs树上)?我是否可以将任何目录/文件放在脚本所在的同一目录中(本地)?python中是否有任何lite gRPC impl(可能功能有限)可以轻松准备分发(例如复制/粘贴)

仅供参考,我曾尝试使用python -m pip install grpcio --targetpython -m zipapp resources -m "grpc_serial:main",但由于模块cygrpc也未找到,因此它甚至在本地也无法工作(但如果使用全局安装的grpc包,则工作正常):

import error: cannot import name 'cygrpc' from 'grpc._cython' (../python3/lib/python3.9/grpc/_cython/init.py)

如果我运行“python-mpipinstallcygrpc--targetresources”来为cygrpc创建一个独立的dist,我会得到大约50Mb的30个目录(可能是可传递的dep),这简直是太重了

如果有帮助,我可以为site-packages提供tree输出


Tags: import目录脚本grpclibpackagesdistchannel
1条回答
网友
1楼 · 发布于 2024-04-26 12:04:38

通过使用ThriftRPC解决了这个问题(解决方法),它在python方面似乎更轻量级(它只需要在本地安装thriftsixdeps(在同一目录中))

我猜不使用gRPC的根本原因是没有安装可传递的deps(不确定是gRPC还是pip问题)

相关问题 更多 >