48757
# 環境

  * pip 18.0
  * Python 3.6.6
  * Anaconda 3.5.2
  * Windows10

# 背景

私のホームディレクトリには、`.netrc`ファイルを配置しています。これは、Gitコマンドなどを使ったとき、ユーザID、パスワードを省略するためです。  
先日、以下のように`.netrc`ファイルのフォーマットが間違っていたため、`pip install`時に「UnicodeDecodeError:
'cp932' codec can't decode byte 0x82 in position 56: illegal multibyte
sequence」というエラーが発生しました。

```

    machine example.com
    login xxxxxx
    password yyyyyy
    
    あ
    
```

上記のエラーから、`pip install`では`.netrc`を参照することが分かりました。  
また、以下のイシューからも`.netrc`を参照することが分かります。  
<https://github.com/pypa/pip/issues/3569>

しかし、pipのドキュメントにnetrcについては記載されていませんでした。  
<https://pip.pypa.io/en/stable/#>

# 質問

## `.netrc`を参照する理由

単純な興味なのですが、`pip install`時に`.netrc`を参照するのは、どういった理由でしょうか？  
`pip install`時にユーザIDとパスワードが必要である状況が分からないので、なぜ`.netrc`を参照するのかが疑問です。  
また、pipのドキュメントにnetrcについて言及していないのも気になります。
CC BY-SA 4.0
2018-09-26T16:20:45.610
48741
2018-09-27T05:47:36.270
19524
question
python pip
pip installコマンドが.netrcファイルを参照する理由
まず pip の
[NEWS.rst](https://github.com/pypa/pip/blob/f0ab8dfe5fcf7274efc8aaa118f4b4650c03689e/NEWS.rst#L425)
を見ると、pip 9.0.0 (2016-11-02) において `.netrc` からクレデンシャル情報を読み取る機能が追加されたと書かれています。これは
pip の [Issue #3569](https://github.com/pypa/pip/issues/3569) で要望され、[Pull
Request #3715](https://github.com/pypa/pip/pull/3715) で実装されています。ただし Pull
Request の内容を見るに、このバージョン以前から .netrc を読み取る機構自体は依存ライブラリである [requests
に存在し](https://github.com/requests/requests/commit/79bb9ee1417afe2231972c1331308500104e5dc7)、この
Pull Request から pip でも使うようになったようです。

用途に関してですが、[`pip
install`](https://pip.pypa.io/en/stable/reference/pip_install/) は URI
からインストールすることもできるので、プライベートなリポジトリからインストールする場合にはクレデンシャル情報が必要そうです。私はやったことがありませんが、実際
["Is it possible to use pip to install a package from a private github
repository?"](https://stackoverflow.com/a/39519547/5989200) によると .netrc
を使えるようです。

ドキュメントに書かれていない点は先の Issue #3569
で[指摘されています](https://github.com/pypa/pip/issues/3569#issuecomment-324047840)が、現状反応が無いので解決されていない既知の問題に見えます。
CC BY-SA 4.0
2018-09-27T05:47:36.270
48757
2018-09-27T05:47:36.270
19110
48741
answer