【问题标题】:How to install gRPC python package on IoT device?如何在物联网设备上安装 gRPC python 包?
【发布时间】:2020-10-17 10:27:26
【问题描述】:

我有一个 IoT 设备(Android 设备)和一些 python 脚本来与在同一设备上运行的 gRPC 服务器交互(作为一个 Android 应用程序)。我已经交叉编译了 Python3 并且通常它正在工作 - 我能够从 Android 应用程序运行一些 python 脚本(使用Runtime.getRuntime().exec(...) 并传递PATHPWDPYTHONHOMEPYTHONPATH、@ 987654326@, ANDROID_ROOT 环境变量)。

使用gRPC的python脚本如下:

...
import gprc

...

channel = grpc.insecure_channel(url)

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

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

这是物联网设备上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 设备,这可能是不正确的)。

正确的方法是什么(我应该将相关库放在 python 目录树的位置和确切位置)?我可以将任何目录/文件放到脚本所在的同一目录(本地)吗? python 中是否有任何可以轻松准备分发(例如复制/粘贴)的 lite gRPC impl(可能功能有限)?

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

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

如果我运行“python -m pip install cygrpc --target resources”来为 cygrpc 创建一个独立的 dist,我会得到大约 50Mb 的大约 30 个目录(可能是传递的 deps),这简直是疯狂的沉重。

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

【问题讨论】:

    标签: python android pip package grpc


    【解决方案1】:

    通过使用Thrift RPC 解决了它(解决方法),这在python 端似乎更轻量级(它只需要在本地安装thriftsix deps(在同一目录中))。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多