我目前正在尝试使用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文件,其中包含项目中使用的所有库
任何帮助将不胜感激!
答案 0 :(得分:4)
从字面上看,只是在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
google_api_python_client-*/
<pythonInstallLocation>/lib/site-packages/
的某个地方google_api_python_client-*/
复制到应用程序的src资源目录中。对于fbs
,它可以是:
src/freeze/windows/
(推荐),或src/resources/windows/
现在,当您fbs freeze
,随后fbs installer
您的应用程序时,google_api_python_client-*/
将与其他googleapiclient
python库一起被包含在已构建应用程序的目录中,并且错误应该消失了离开。
See: fbs project directory structure
如果您的包装解决方案没有上述类似的挂钩,则:
google_api_python_client-*/
文件夹从<pythonInstallLocation>/lib/site-packages/
手动复制到内置应用程序的目录中(或您编译的python脚本尝试访问google-api-python-client
的任何位置。答案 1 :(得分:2)
我能够在Link
处找到解决方案将您的google-api-python-client版本更新为链接中指定的版本(对我有用)
还制作了一个.bat小文件:
pyinstaller --hidden-import="pkg_resources.py2_warn" --hidden-import="googleapiclient" --hidden-import="apiclient" main.py --onefile
还要注意:我在虚拟环境中运行了bat文件。
答案 2 :(得分:1)
将 Google 目录从 Python 应用程序安装位置的 Python//Lib/site-packages 目录复制到 pyinstaller 创建的 dist/
答案 3 :(得分:0)
确保pip链接到pip3(Python 3),而不是pip2(Python2)。在许多操作系统和发行版上,情况仍然如此。
检查是否可以解决您的问题:
python3 -m pip install --upgrade google-api-python-client
如果确实如此,则将别名添加到您的.bashrc中,该别名将pip链接到pip3而不是pip2。
例如
echo "alias pip='pip3'" >> ~/.bashrc
答案 4 :(得分:0)
如果您使用PyCharm进行编码,请执行以下操作:
$ pip3 freeze
答案 5 :(得分:0)
只想添加到@joeyipanimation答案中,因为它可以帮助我在下班后解决问题。在exe文件夹或libary区域中搜索google_api_python_client-1.9.3.dist-info,并将其复制到exe所在的主文件夹中。
答案 6 :(得分:0)
我的案例是使用.spec文件与Pyinstaller --onefile选项捆绑在一起的Python-Flask Windows应用程序。
我已经将文件夹google_api_python_client-1.9.3.dist-info从原始位置(可能是Windows site-packages文件夹)复制到了项目文件夹。
在Pyinstaller规范文件数据部分(app.spec)中添加以下行是解决此问题的方法。
a = Analysis(.......
datas=[.....
('project\\google_api_python_client-1.9.3.dist-info','google_api_python_client-1.9.3.dist-info'),
.......],