1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pip installでUnicodeDecodeError発生(.netrcに日本語が含まれていたため)

Last updated at Posted at 2018-09-26

環境

  • pip 18.0
  • Python 3.6.6
  • Anaconda 3.5.2
  • Windows10

問題

pip installを実行したら、「UnicodeDecodeError: 'cp932' codec can't decode byte 0x82 in position 56: illegal multibyte sequence」というエラーが発生しました。

>pip install pandas --upgrade                                                                                        
Exception:                                                                                                                                   
Traceback (most recent call last):                                                                                                           
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\basecommand.py", line 141, in main                                    
    status = self.run(options, args)                                                                                                         
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\commands\install.py", line 299, in run                                
    resolver.resolve(requirement_set)                                                                                                        
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\resolve.py", line 102, in resolve                                     
    self._resolve_one(requirement_set, req)                                                                                                  
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\resolve.py", line 256, in _resolve_one                                
    abstract_dist = self._get_abstract_dist_for(req_to_install)                                                                              
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\resolve.py", line 199, in _get_abstract_dist_for                      
    skip_reason = self._check_skip_installed(req)                                                                                            
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\resolve.py", line 170, in _check_skip_installed                       
    self.finder.find_requirement(req_to_install, upgrade=True)                                                                               
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\index.py", line 494, in find_requirement                              
    all_candidates = self.find_all_candidates(req.name)                                                                                      
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\index.py", line 452, in find_all_candidates                           
    for page in self._get_pages(url_locations, project_name):                                                                                
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\index.py", line 597, in _get_pages                                    
    page = self._get_page(location)                                                                                                          
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\index.py", line 715, in _get_page                                     
    return HTMLPage.get_page(link, session=self.session)                                                                                     
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\index.py", line 824, in get_page                                      
    "Cache-Control": "max-age=600",                                                                                                          
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\sessions.py", line 525, in get                                 
    return self.request('GET', url, **kwargs)                                                                                                
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\download.py", line 396, in request                                    
    return super(PipSession, self).request(method, url, *args, **kwargs)                                                                     
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\sessions.py", line 498, in request                             
    prep = self.prepare_request(req)                                                                                                         
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\sessions.py", line 441, in prepare_request                     
    hooks=merge_hooks(request.hooks, self.hooks),                                                                                            
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\models.py", line 313, in prepare                               
    self.prepare_auth(auth, url)                                                                                                             
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\models.py", line 544, in prepare_auth                          
    r = auth(self)                                                                                                                           
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_internal\download.py", line 160, in __call__                                   
    netrc_auth = get_netrc_auth(req.url)                                                                                                     
  File "c:\users\yuji3\anaconda3_5.2.0\lib\site-packages\pip\_vendor\requests\utils.py", line 201, in get_netrc_auth                         
    _netrc = netrc(netrc_path).authenticators(host)                                                                                          
  File "c:\users\yuji3\anaconda3_5.2.0\lib\netrc.py", line 33, in __init__                                                                   
    self._parse(file, fp, default_netrc)                                                                                                     
  File "c:\users\yuji3\anaconda3_5.2.0\lib\netrc.py", line 42, in _parse                                                                     
    toplevel = tt = lexer.get_token()                                                                                                        
  File "c:\users\yuji3\anaconda3_5.2.0\lib\shlex.py", line 105, in get_token                                                                 
    raw = self.read_token()                                                                                                                  
  File "c:\users\yuji3\anaconda3_5.2.0\lib\shlex.py", line 136, in read_token                                                                
    nextchar = self.instream.read(1)                                                                                                         
UnicodeDecodeError: 'cp932' codec can't decode byte 0x82 in position 56: illegal multibyte sequence                                          

原因

.netrcファイルに、以下のように日本が記載されていたためです。
日本語を取り除いたら、pip installは成功しました。

.netrc
machine example.com
login xxxxxx
password yyyyyy

あ

ハマった理由

原因はしょうもないことでした。これに30分ぐらいハマっていました。
しかし、なぜ私はハマったのでしょうか?

1つ目は、pip install.netrcを読み込むことを知らなかったからだと思います。pip installのドキュメントにも.netrcを読み込むとは書いていませんでした。

2つ目は、スタックトレースの最後がnetrcでなかったからだと思います。スタックトレースの最後はshlex.pyなので、最初はshlex.pyを調査していました。原因が分からないなと悩んでいたときに、スタックトレース全体を見たみたら"netrc"という文字列を見つけ、".netrc"を疑うことができました。

疑問

pip installはなぜ".netrc"を読み込むのでしょうか?netrcは古い機能(もともとFTPコマンド用)だと思うのですが、どこかで使っているのでしょうか?そしてpipip installのドキュメントにnetrcについて記載されていないのはなぜなんでしょうか?
なぞは深まるばかりです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?