【问题标题】:pyinstaller No module named grpcpyinstaller 没有名为 grpc 的模块
【发布时间】:2018-07-01 20:18:06
【问题描述】:

我的目标是使用 pyinstaller 构建一个可执行文件。我正在尝试构建的 python 脚本导入 grpc。下面是一个说明 hello.py 问题的示例。

  import grpc
  if __name__ == '__main__':
     print "hello world"

我做 pyinstaller hello.py 并产生预期的 dist 目录。然后我像./dist/hello/hello 一样运行它,我得到错误ImportError: No module named grpc.

然后我使用pip install grpc 安装了grpc。当我重建工件时,我现在收到错误Import grpc:No module named gevent.socket

在线阅读表明要安装的正确项目实际上是 grpcio 和 grpcio-tools。所以我尝试了pip uninstall grpcpip install grpciopip install grpcio-tools。这样做并重建工件给了我错误ImportError: No module named pkg_resources。尝试pip install pkg_resources 会出错:Could not find a version that satisfies the requirement pkg_resources

安装所有grpcio grpcio-toolsgrpc 会出现同样的错误:Import grpc:No module named gevent.socket

这似乎应该是一个非常简单的任务。我只是想用pyinstaller构建一个依赖grpc的神器,我该怎么做呢?

【问题讨论】:

  • 你试过pip install gevent吗? 没有名为 gevent.socket 的模块向我建议 gevent 未安装?
  • 是的,我确实尝试过。然后我得到错误Import grpc:No module named coros。然后我尝试pip install coros,我得到错误Could not find a version that satisfies the requirement coro

标签: python pyinstaller grpc


【解决方案1】:

我遇到了同样的问题。我参考了这份文件:gRPC

根据文档,首先将您的 pip 升级到版本 9 或更高版本。

然后使用以下命令:

$ python -m pip install grpcio
$ python -m pip install grpcio-tools

它对我有用!

【讨论】:

  • pip --version 给出pip 9.0.1。我运行了python -m pip install grpciopython -m install grpcio-tools,然后运行构建的工件给出ImportError: No module named pkg_resources
  • setuptools 似乎有一些错误或已被删除。重新安装 setuptools 可能会解决此问题。这是链接:(pypi.python.org/pypi/setuptools/0.9.8#installation-instructions)
  • 你可以运行这个命令:wget bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - |蟒蛇
  • 该链接给了我一个 404,所以我使用了 wget https://bootstrap.pypa.io/ez_setup.py -O - | python,然后是 python -m pip install grpcio python -m pip install grpcio-tools pyinstaller hello.py ./dist/hello/hello 并且仍然给了 ImportError: No module named pkg_resources 执行 python -m pip install pkg_resources`给出没有为 pkg_resources 找到匹配的分布`
  • 这是 setuptools 的问题。尝试使用 get-pip.py 重新安装 pip。如果它们以某种方式损坏或删除,它将安装 setuptools。您可以这样做:{ wget bootstrap.pypa.io/get-pip.py } { python get-pip.py }
【解决方案2】:

我正在使用 grpc 对 Python 应用程序进行 PyInstaller/cx_freeze 可分发。

您可以尝试添加--hidden-import=pkg_resources 看看会发生什么吗?

这帮我解决了

【讨论】:

  • 是的,做到了——结合确保安装了 grpcio 和 grpcio-tools。非常感谢
  • 太棒了!我被困了好几天:(