The 'google-api-python-client' distribution was not found and is required by the application with pyinstaller

后端 未结 6 888
长情又很酷
长情又很酷 2020-12-02 01:13

I am currently trying to build an app with pyinstaller. I have gotten the error The \'google-api-python-client\' distribution was not found and is required by the appl

相关标签:
6条回答
  • 2020-12-02 01:31

    Just wanted to add to @joeyipanimation answer as it helped me to solve the problem after hours. Search for google_api_python_client-1.9.3.dist-info in your exe folder or libary area, and copy it to the main folder of where the exe is.

    0 讨论(0)
  • 2020-12-02 01:33

    make sure that pip is linked to pip3 (Python 3) and not pip2 (Python2). On many OS(es) and distros, that's still the case.

    Check if that solves your problem:

    python3 -m pip install --upgrade google-api-python-client
    

    If it did then add an alias to your .bashrc that links pip to pip3 and not pip2.

    e.g.

    echo "alias pip='pip3'" >> ~/.bashrc
    
    0 讨论(0)
  • 2020-12-02 01:40

    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

    1. Locate the google_api_python_client-*/
      • likely somewhere <pythonInstallLocation>/lib/site-packages/
    2. Copy google_api_python_client-*/ into your application's src resource directory. For fbs 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:

    1. Build your app
    2. 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 access google-api-python-client.
    3. Try starting the app

    pythonfbsfreezegoogle-api-python-client

    0 讨论(0)
  • 2020-12-02 01:44

    If you are coding using PyCharm, do the next:

    1. Run $ pip3 freeze in the terminal
    2. Create the file "requirements.txt" in your project folder
    3. Copy the result of the first step into "requirements.txt"
    4. PyCharm will show the message that installed packages in /venv do not satisfy "requirements.txt". Click the "Install packages" button, wait until all the packages are installed and then build your app again.
    0 讨论(0)
  • 2020-12-02 01:55

    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.

    0 讨论(0)
  • 2020-12-02 01:55

    My case is an Python-Flask windows app bundled with Pyinstaller --onefile option, using a .spec file.

    I've copied the folder google_api_python_client-1.9.3.dist-info from the original location (maybe the windows site-packages folder) to the project folder.

    Adding the following line to Pyinstaller spec file datas section (app.spec) was the solution for the problem.

    a = Analysis(.......  
    
    datas=[.....
    
    ('project\\google_api_python_client-1.9.3.dist-info','google_api_python_client-1.9.3.dist-info'),     
    
    .......],
    
    0 讨论(0)
提交回复
热议问题