Reputation: 165
My goal is to build an executable using pyinstaller. The python script I am trying to build imports grpc. The following is an example that illustrates the problem called hello.py.
import grpc
if __name__ == '__main__':
print "hello world"
I do pyinstaller hello.py
and that produces the expected dist directory. Then I run it like ./dist/hello/hello
and I get error ImportError: No module named grpc.
So then I installed grpc using pip install grpc
. When I rebuild the artifact I now get error Import grpc:No module named gevent.socket
.
Reading online indicated that the correct items to install were actually grpcio and grpcio-tools. So I tried pip uninstall grpc
pip install grpcio
and pip install grpcio-tools
. Doing this and rebuilding the artifact gave me error ImportError: No module named pkg_resources
. Trying to pip install pkg_resources
gives error: Could not find a version that satisfies the requirement pkg_resources
Having all grpcio
grpcio-tools
and grpc
install gives the same error: Import grpc:No module named gevent.socket
This seems like it should be a very simple task. I simply want to use pyinstaller to build an artifact that has a dependency on grpc, how do I do this?
Upvotes: 13
Views: 56998
Reputation: 15406
I am working on doing a PyInstaller/cx_freeze distributable of a python app using grpc.
Can you try adding --hidden-import=pkg_resources
and see what happens?
This solved it for me
Upvotes: 5
Reputation: 697
I faced the same issue. I referred this document: gRPC
As per the documentation, first upgrade your pip to version 9 or higher.
Then use the following commands:
$ python -m pip install grpcio
$ python -m pip install grpcio-tools
It worked for me!
Upvotes: 34