42942


下記１のコードに対して、下記２のエラーが発生します。エラーコードを元に海外のサイトなども見合わせてみましたが、Anacondaが原因だろうというところまでたどり着いたのですが、根本的な原因がわからずじまいです。解決法を知っている方いらっしゃいましたら、シェアの方よろしくお願いいたします。

下記(実行コード)

[code]

                import os
                import gspread
                from oauth2client.service_account import 
                ServiceAccountCredentials
    
                def main():
                    scope = ['https://spreadsheets.google.com/feeds']
                    doc_id = 'Your doc id'
                    path = os.path.expanduser("Path of json file")
    
                    credentials = ServiceAccountCredentials.from_json_keyfile_name(path, scope)
                    client = gspread.authorize(credentials)
                    gfile   = client.open_by_key(doc_id)
                    worksheet  = gfile.sheet1
                    records = worksheet.get_all_values()
    
                    for record in records:
                        print(record)
    
                if __name__ == '__main__':
                    main()
    
[/code]

下記２(エラー)

[code]

                Traceback (most recent call last):
                  File "/Users/user/flilhack/\u540d\u79f0\u672a\u8a2d\u5b9a\u30d5\u30a9\u30eb\u30bf\u3099/tes.py", line 20, in <module>
                    main()
                  File "/Users/user/flilhack/\u540d\u79f0\u672a\u8a2d\u5b9a\u30d5\u30a9\u30eb\u30bf\u3099/tes.py", line 13, in main
                    worksheet  = gfile.sheet1
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/gspread/v4/models.py", line 75, in sheet1
                    return self.get_worksheet(0)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/gspread/v4/models.py", line 138, in get_worksheet
                    sheet_data = self.fetch_sheet_metadata()
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/gspread/v4/models.py", line 120, in fetch_sheet_metadata
                    r = self.client.request('get', url, params=params)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/gspread/v4/client.py", line 67, in request
                    endpoint, json=json, params=params, data=data, files=files
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/requests/sessions.py", line 521, in get
                    return self.request('GET', url, **kwargs)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/requests/sessions.py", line 508, in request
                    resp = self.send(prep, **send_kwargs)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/requests/sessions.py", line 618, in send
                    r = adapter.send(request, **kwargs)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/requests/adapters.py", line 407, in send
                    self.cert_verify(conn, request.url, verify, cert)
                  File "/Users/user/anaconda3/lib/python3.6/site-packages/requests/adapters.py", line 226, in cert_verify
                    "invalid path: {0}".format(cert_loc))
                OSError: Could not find a suitable TLS CA certificate bundle, invalid path: /Users/user/anaconda3/lib/python3.6/site-packages/certifi/cacert.pem
                [Finished in 0.641s]
    
[/code]

使用環境  
Mac10.13.3 Python3


CC BY-SA 3.0
2018-04-04T14:28:47.587
42930
2018-04-06T08:04:58.060
27824
question
python
PythonでおそらくAnacondaが原因かと思われるOSErrorの解決法を知りたいです


もう一つ答えを見つけました。  
[Problem finding certificate
#4171](https://github.com/requests/requests/issues/4171)

ここによると、同様のcertifi Errorが生じており、Anaconda Python3.6系であるとのことなので、環境が似ています。  
(訳:私はこの問題を,/lib/site-packages/certifi to /lib/site-
packages/requestsからcacert.pemファイルをコピーして解決しました。)

> I solved this by manually copying the cacert.pem file from /lib/site-
> packages/certifi to /lib/site-packages/requests and that solved the issue
> with plotly. Using Anaconda with Python 3.6 on OSX.

これも、

> I solved the issue by uninstalling and reinstalling Anaconda. I use
> Anaconda3 4.4.0 and fix-yahoo-finance 0.0.19 on Ubuntu Linux.

こちらでは、一度Anacondaをアンインストールし、再度インストールして解決したとあります。  
ウブントゥとリナックスの情報ですけどね。  
次の質問を出されておられるようですが、mjyさんがご指摘の通り、certifiモジュールが更新されるようにされるのがいいかなと思います。

（以前↓）  
全く同じようなエラーを出した人を見付けたので、載せておきます。  
[OSError: Could not find a suitable TLS CA certificate bundle, invalid
path:](http://github.com/cs50/submit50/issues/75\])

問題は、`python setup.py develop` によって引き起こされる`easy
install`にあるようだと言われています。そのパッケージと依存関係にあるものをインストールするためのものですが、そのうちのパッケージの一つを誤解してしまうようです。  
`certifi`というパッケージのようです。  
インストールされた後で、ジップされたままでいられるようで、そのまま動いてくれるものだそうです。  
`python setup.py develop` の代わりに、

[code]

    pip install -e .
    
[/code]

を使いなさいと書かれていました。

この使い方に関しては、こちらを参照してほしいとのこと。  
<https://stackoverflow.com/questions/2087148/can-i-use-pip-instead-of-easy-
install-for-python-setup-py-install-dependen/2090124#2090124>

`easy_install`に関してはこちらを参照とのこと。  
[setuptools](http://peak.telecommunity.com/DevCenter/setuptools#setting-the-
zip-safe-flag)  
質問文からはこのような事をされたような気はしませんけど、エラー状況がそっくりなので載せてみました。おそらく、`certifi`というパッケージが、ジップで圧縮された状態のままで稼働しているため、その`certifi`というものにコードの処理が及んだ場合に、そうしたエラーがおきるのではないでしょうか？ジップを解いちゃうと正常に動く可能性がある・・・のですが、どうなるかはわかりません。あるいはコメントでご指摘の通り、certifiというものそれ自体がないということもありますね。問題は、これをどう認識するかだろうと思います。

> So the problem seems to be that easy_install, which is invoked by python
> setup.py develop to install the package and its dependencies, mistakenly
> thinks one of the dependency packages, certifi, can stay zipped after
> getting installed, and still work.
>
> Unfortunately, it seems requests tries to access a resource from this
> package, assuming it's a directory (unzipped), which throws the invalid path
> error.
>
> One solution might be using  
>  $ pip install -e .
>
> instead of  
>  python setup.py develop
>
> to install package in dev mode, since pip seems to always unzip packages per


CC BY-SA 3.0
2018-04-05T03:07:12.997
42942
2018-04-06T08:04:58.060
2018-04-06T08:04:58.060
24284
24284
42930
answer