2015-01-09 26 views
1

我在玩GMAIL API來創建一個應用程序來從我的服務器發送自動電子郵件。運行我的應用程序作爲一個簡單的用戶具有以下結果:Google GMail API`installed`應用程序顯示來自模塊SSL.py的IOError 13沒有sudo

[email protected]:~/tomotech/gmailer$ python mailer.py 
Traceback (most recent call last): 
    File "mailer.py", line 36, in <module> 
    gmail_service = build('gmail', 'v1', http=http) 
    File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.4.5-py2.7.egg/oauth2client/util.py", line 135, in positional_wrapper 
    File "/usr/local/lib/python2.7/dist-packages/google_api_python_client-1.3.1-py2.7.egg/googleapiclient/discovery.py", line 198, in build 
    File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.4.5-py2.7.egg/oauth2client/util.py", line 135, in positional_wrapper 
    File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.4.5-py2.7.egg/oauth2client/client.py", line 547, in new_request 
    File "/usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg/httplib2/__init__.py", line 1593, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg/httplib2/__init__.py", line 1335, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg/httplib2/__init__.py", line 1257, in _conn_request 
    conn.connect() 
    File "/usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg/httplib2/__init__.py", line 1021, in connect 
    self.disable_ssl_certificate_validation, self.ca_certs) 
    File "/usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg/httplib2/__init__.py", line 80, in _ssl_wrap_socket 
    cert_reqs=cert_reqs, ca_certs=ca_certs) 
    File "/usr/lib/python2.7/ssl.py", line 886, in wrap_socket 
    ciphers=ciphers) 
    File "/usr/lib/python2.7/ssl.py", line 496, in __init__ 
    self._context.load_verify_locations(ca_certs) 
IOError: [Errno 13] Permission denied 

在另一方面,使用sudo運行完美的作品

[email protected]:~/tomotech/gmailer$ sudo python mailer.py 
Message Id: 14ad0aea05e***** 

要完全誠實的,爲了使用--noauth_local_webserver到authenicate,我跑命令與sudo,認證和chowngmail.storage再次給我自己。 另外,我安裝使用easy_install因爲pip install是給我下面的錯誤:

[email protected]:~/tomotech/gmailer$ sudo pip install --upgrade google_api_python_client 
Cleaning up... 
Exception: 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 278, in run 
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) 
    File "/usr/local/lib/python2.7/dist-packages/pip/req.py", line 1096, in prepare_files 
    req_to_install, self.upgrade) 
    File "/usr/local/lib/python2.7/dist-packages/pip/index.py", line 194, in find_requirement 
    page = self._get_page(main_index_url, req) 
    File "/usr/local/lib/python2.7/dist-packages/pip/index.py", line 568, in _get_page 
    session=self.session, 
    File "/usr/local/lib/python2.7/dist-packages/pip/index.py", line 670, in get_page 
    resp = session.get(url, headers={"Accept": "text/html"}) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 395, in get 
    return self.request('GET', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 237, in request 
    return super(PipSession, self).request(method, url, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 383, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 506, in send 
    history = [resp for resp in gen] if allow_redirects else [] 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 168, in resolve_redirects 
    allow_redirects=False, 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 486, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/adapters.py", line 330, in send 
    timeout=timeout 
    File "/usr/local/lib/python2.7/dist- packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 480, in urlopen 
    body=body, headers=headers) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 285, in _make_request 
    conn.request(method, url, **httplib_request_kw) 
    File "/usr/lib/python2.7/httplib.py", line 1001, in request 
    self._send_request(method, url, body, headers) 
    File "/usr/lib/python2.7/httplib.py", line 1035, in _send_request 
    self.endheaders(body) 
    File "/usr/lib/python2.7/httplib.py", line 997, in endheaders 
    self._send_output(message_body) 
    File "/usr/lib/python2.7/httplib.py", line 850, in _send_output 
    self.send(msg) 
    File "/usr/lib/python2.7/httplib.py", line 826, in send 
    self.sock.sendall(data) 
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py", line 323, in sendall 
    return self.connection.sendall(data) 
    File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 969, in sendall 
    raise TypeError("buf must be a byte string") 
TypeError: buf must be a byte string 

Storing debug log for failure in /root/.pip/pip.logrom oath2client import tool 

這是我的理解是,問題的根源是在兩種情況下是相同的。 我還必須注意到,即使安裝是以相同的方式完成的,我的筆記本電腦(通常可以在webbrowser上進行身份驗證,而不是在--noauth_local_webserver上),但它工作得很好。

在此先感謝和抱歉的長期職位! 我使用的教程: parse arg code for sending mails 應用程序體幾乎是gmail api的快速入門。

回答

9

httplib2安裝程序爲其httplib2/cacerts.txt文件設置了不正確的權限。一個解決方案是簡單地做它的文件讀取任何人通過運行

chmod o+r -R /usr/local/lib/python2.7/dist-packages/httplib2-0.9-py2.7.egg 

但是,它可能是更好的卸載由PIP安裝的版本,並使用操作系統的包管理器來代替,這可能有正確的權限全部文件。在Debian,這可能與

pip uninstall httplib2 
apt-get install python-httplib2 
+3

不知道爲什麼有人給了這個-1完成..問題解決了,我在OSX: sudo的文件模式Ø+ R /Library/Python/2.7/site-packages/httplib2 -0.9.1-py2.7.egg/httplib2/cacerts.txt – IcEBnd 2015-08-31 08:19:56

+0

sudo chmod o + r /Library/Python/2.7/site-packages/httplib2-0.9.1-py2.7.egg/h tplpl2/cacerts .txt在osx中​​工作10.11.6 – 2017-01-20 21:28:47

+0

在我的情況下,我安裝了兩個版本,我不知道爲什麼。 'pip卸載httplib2'刪除了舊版本(剛剛安裝),並且全部恢復正常。確保你閱讀了哪個版本的'pip'正在刪除或者事情可能會嚴重結束。 – 2017-10-13 13:20:04