Дистрибутив 'google-api- python -client' не найден и требуется приложением с pyinstaller - PullRequest
0 голосов
/ 29 апреля 2020

Я сейчас пытаюсь собрать приложение с помощью pyinstaller. Я получил ошибку The 'google-api-python-client' distribution was not found and is required by the application, и я совершенно заблудился почему.

Запуск pip show google-api-python-client результатов с

Name: google-api-python-client
Version: 1.8.2
Summary: Google API Client Library for Python
Home-page: http://github.com/google/google-api-python-client/
Author: Google LLC
Author-email: googleapis-packages@google.com
License: Apache 2.0
Location: c:\dev\software\schoology_scrape\schoology_scrape_venv\lib\site-packages
Requires: google-auth-httplib2, uritemplate, google-auth, google-api-core, httplib2, six
Required-by:

У меня также есть файл require.txt со всеми используемыми библиотеками в проекте

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

убедитесь, что pip связан с pip3 (Python 3), а не с pip2 (Python2). На многих ОС и дистрибутивах это все еще так.

Проверьте, решает ли это вашу проблему:

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

Если это так, добавьте псевдоним к вашему .bashr c который связывает pip с pip3, а не с pip2.

например,

echo "alias pip='pip3'" >> ~/.bashrc
0 голосов
/ 30 апреля 2020

Буквально только что столкнулся с этой проблемой на windows, тогда как с macOS все в порядке. Я строю с fbs и PyQt5 .

Проблема

google-api-python-client это не модуль python, а ресурс, это означает, что вы не можете внедрить его как скрытый импорт. googleapiclient.model считывает информацию о распространении из папки google-api-python-client в виде упакованного ресурса.

Ваша полная ошибка может выглядеть следующим образом:

...
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


Решение 1 - Если вы используете fbs или другую общую упаковочную инфраструктуру

  1. Найдите google_api_python_client-*/
    • , вероятно, где-то <pythonInstallLocation>/lib/site-packages/
  2. Копировать google_api_python_client-*/ в каталог ресурсов вашего приложения sr c. Для fbs это может быть:
    • src/freeze/windows/ (рекомендуется) или
    • src/resources/windows/

Теперь, когда вы fbs freeze и впоследствии fbs installer вашего приложения google_api_python_client-*/ будут включены в каталог встроенного приложения вместе с другими библиотеками googleapiclient python, и ошибка должна исчезнуть go.

См .: структура каталога проекта fbs

Решение 2 - Нет крючков для автоматической упаковки (не проверено):

Если ваше решение для упаковки не имеет таких же крючков, как указано выше, то:

  1. Создайте свое приложение
  2. Вручную скопируйте папку google_api_python_client-*/ из <pythonInstallLocation>/lib/site-packages/ в каталог встроенного приложения (или туда, где ваши скомпилированные python сценарии пытаются получить доступ к google-api-python-client.
  3. Попробуйте запустить приложение

...