GSpread ImportError:没有名为oauth2client.service_account的模块

时间:2016-06-16 04:39:25

标签: python google-api-python-client google-app-engine-python gspread

好的我跟随“成为技术营销人员”课程,并尝试学习如何使用GSpread管理Google Spreadsheets。我已按照http://gspread.readthedocs.io/en/latest/oauth2.html处的文档进行操作。我已按照上面第二个网址中的步骤操作了一个包含以下代码的文档:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name('DFS Google Sheets Data Imports-7205de852ff7.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open("Authority Scraper").sheet1
wks.update_cell(1,2,"Hello World!")

由此我在终端中收到错误:来自oauth2client.service_account import ServiceAccountCredentials ImportError:没有名为oauth2client.service_account

的模块

terminal error printout

有人请帮助我。其他没有名为oath2client.service_account的模块的答案对我不起作用。谢谢!

4 个答案:

答案 0 :(得分:14)

运行此命令对我有用 -    <input type="hidden" value="" class="process_custom_images" id="process_custom_images"> <button class="button button_style set_custom_images"><span><i class="fa fa-upload" aria-hidden="true"></i></span><?php _e( 'Upload Image'); ?></button> <script> jQuery(document).ready(function() { var $ = jQuery; if ($('.set_custom_images').length > 0) { if ( typeof wp !== 'undefined' && wp.media && wp.media.editor) { $(document).on('click', '.set_custom_images', function(e) { e.preventDefault(); var button = $(this); var id = button.prev(); wp.media.editor.send.attachment = function(props, attachment) { id.val(attachment.id); }; wp.media.editor.open(button); return false; }); } } }); </script>

来自oauth2client库github repo

答案 1 :(得分:3)

根据this discussion

  

这是因为OS X El Capitan已经安装了六个1.4.1,当它尝试卸载它时,它没有权限这样做,因为系统完整性保护甚至不允许root修改这些目录。

在答案中提到的几个解决方法中,可能值得尝试pip install --ignore-installed six以避免尝试卸载系统的six包。

答案 2 :(得分:1)

所以我刚刚遇到了这个问题,最终成了我的路径问题。当然,我知道这有点牵强附会(因为每个人的开发环境都不同),但是在这里写这个以防万一它可以帮助别人。

TLDR 确保您的$PYTHONPATH无法解决问题。

回想一下当你做&#34;导入&#34;在python中,python检查sys.path中的包。此列表具有优先顺序(即,如果在列表的早期路径中找到包,则将使用该包)。

在我的情况下,看起来我的$PYTHONPATH在前一段时间做了一些appengine的东西时被修改了。事实证明,我的appengine有自己的oauth2client lib,它已经很老了。

结果,当python尝试from oauth2client.service_account时,它抓住了appengine中的oauth2client而不是我期待它抓取的oauth2client$PYTHONPATH的结果已被修改)。

您可以通过在导入调用之前打印sys.path来验证是否还发生了这种情况:

import sys
print sys.path
from oauth2client.service_account import ServiceAccountCredentials

在我的情况下,我可以清楚地看到一堆优先考虑的追加路径。这导致我检查我的~/.bash_profile我发现这行的地方:

export PYTHONPATH=$PYTHONPATH::$LOCAL_APPENGINE_HOME/lib/:$LOCAL_APPENGINE_HOME/lib/yaml/:$LOCAL_APPENGINE_HOME:$LOCAL_APPENGINE_HOME/lib/webapp2-2.5.2/`

评论说,开始一个新的shell,一切都很有用。

答案 3 :(得分:1)

您可以通过检查库中是否有多个文件夹来修复错误。

cordova.js

您只需要删除其中一个文件夹或更改编译器中的库路径。

以下是我就该主题制作的视频的链接:

How to fix: "No module named service_account" - Python