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

时间:2020-06-26 18:54:47

标签: python android pip package grpc

我有一个IoT设备(Android设备)和一些python脚本,可与在同一设备(作为Android应用程序)上运行的gRPC服务器进行交互。我已经交叉编译了Python3,并且总体上它可以正常工作-我能够从Android应用程序中使用它运行一些python脚本(使用Runtime.getRuntime().exec(...)并传递PATHPWD,{{1 }},PYTHONHOMEPYTHONPATHANDROID_DATA环境变量。

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

ANDROID_ROOT

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

导入错误:没有名为“ grpc”的模块

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

...
import gprc

...

channel = grpc.insecure_channel(url)

如您所见,我已经将相关的软件包放到├── 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 ... 中(通过将相同的文件从我的mac机复制到iot设备,这可能是不正确的)。

什么是正确的方法(我应该在什么地方以及什么地方将相关的库放到python dirs树中)?我可以将任何目录/文件放在脚本所在的同一目录(本地)吗? python中是否有任何精简的gRPC隐式功能(可能功能有限),可以轻松地进行分发(例如,复制/粘贴)?

仅供参考,我尝试先使用site-packages,然后再使用python -m pip install grpcio --target,但由于找不到模块python -m zipapp resources -m "grpc_serial:main",它甚至无法在本地工作(但是如果使用cygrpc包,则可以全局安装):

导入错误:无法从“ grpc._cython”(../ python3 / lib / python3.9 / grpc / _cython / init .py)

导入名称“ cygrpc”

如果我运行“ python -m pip install cygrpc --target resources”以具有cygrpc的独立发行版,我将获得约30个目录(可能是可传递的deps),大约50Mb,这简直太疯狂了。

如果有帮助,我可以为grpc提供tree输出。

1 个答案:

答案 0 :(得分:0)

使用Thrift RPC解决了该问题(解决方法),该RPC在python方面似乎更轻巧(仅需要thriftsix deps本地安装(在同一目录中))

我想未安装gRPC的根本原因未安装传递性deps(不确定是gRPC还是pip问题)。