web-dev-qa-db-fra.com

pyinstaller Aucun module nommé grpc

Mon objectif est de construire un exécutable à l'aide de pyinstaller. Le script python j'essaye de construire des importations grpc. Ce qui suit est un exemple qui illustre le problème appelé hello.py.

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

Je fais pyinstaller hello.py et qui produit le répertoire dist attendu. Ensuite, je le lance comme ./dist/hello/hello et j'obtiens une erreur ImportError: No module named grpc.

Alors j'ai installé grpc en utilisant pip install grpc. Lorsque je reconstruis l'artefact, j'obtiens maintenant une erreur Import grpc:No module named gevent.socket.

La lecture en ligne a indiqué que les éléments corrects à installer étaient en fait grpcio et grpcio-tools. J'ai donc essayé pip uninstall grpcpip install grpcio et pip install grpcio-tools. Faire cela et reconstruire l'artefact m'a donné une erreur ImportError: No module named pkg_resources. Essayer pip install pkg_resources donne une erreur: Could not find a version that satisfies the requirement pkg_resources

Avoir tout grpciogrpcio-tools et grpc install donne la même erreur: Import grpc:No module named gevent.socket

Cela semble être une tâche très simple. Je veux simplement utiliser pyinstaller pour créer un artefact dépendant de grpc, comment faire?

8
Andrew Dawson

Je travaille à faire un PyInstaller/cx_freeze distribuable d'une application python utilisant grpc.

Pouvez-vous essayer d'ajouter --hidden-import=pkg_resources et voyez ce qui se passe?

Cela l'a résolu pour moi

4
Dominic Bou-Samra

J'ai fait face au même problème. J'ai référé ce document: gRPC

Selon la documentation, mettez d'abord à jour votre pip vers la version 9 ou supérieure.

Utilisez ensuite les commandes suivantes:

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

Ça a marché pour moi!

11
Shrinivas Deshmukh