The 'google-api-python-client' distribution was not found and is required by the application with pyinstaller
I was able to find the solution here Link
Update your version of google-api-python-client to the version specified in the link (worked for me)
Also made a little .bat file:
pyinstaller --hidden-import="pkg_resources.py2_warn" --hidden-import="googleapiclient" --hidden-import="apiclient" main.py --onefile
Also of note: I ran the bat file in a virtual environment.
Literally just ran into this issue on windows, whereas macOS is okay. I'm building with fbs and PyQt5.
The Problem
google-api-python-client
is not a python module, but a resource, which means you cannot inject it as a hidden-import. googleapiclient.model
reads the distribution info from google-api-python-client
folder as a packaged resource.
Your full error might look closer to this:
...
File "c:\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\googleapiclient\http.py", line 67, in <module>
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "c:\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\googleapiclient\model.py", line 36, in <module>
File "site-packages\pkg_resources\__init__.py", line 479, in get_distribution
File "site-packages\pkg_resources\__init__.py", line 355, in get_provider
File "site-packages\pkg_resources\__init__.py", line 898, in require
File "site-packages\pkg_resources\__init__.py", line 784, in resolve
pkg_resources.DistributionNotFound: The 'google-api-python-client' distribution was not found and is required by the application
Solution 1 – If using fbs or other common packaging framework
- Locate the
google_api_python_client-*/
- likely somewhere
<pythonInstallLocation>/lib/site-packages/
- likely somewhere
- Copy
google_api_python_client-*/
into your application's src resource directory. Forfbs
this can be either:-
src/freeze/windows/
(recommended), or src/resources/windows/
-
Now when you fbs freeze
and subsequently fbs installer
your app, the google_api_python_client-*/
will be included in the built app's directory alongside other googleapiclient
python libraries, and the error should go away.
See: fbs project directory structure
Solution 2 - No auto-packaging hooks (untested):
If your packaging solution does not have similar hooks as above, then:
- Build your app
- Manually copy the
google_api_python_client-*/
folder from<pythonInstallLocation>/lib/site-packages/
into the built app's directory (or wherever your compiled python scripts are trying to accessgoogle-api-python-client
. - Try starting the app
pythonfbsfreezegoogle-api-python-client