AnacondaのinstallでHTTPエラーが出てお仕事が進まなかった話

# はじめに
会社でanaconda環境を使ってお仕事をしていたところ、`conda install 〇〇`とライブラリのインストールをしようとしたらHTTPエラーが出てしまい、しばらく困ってしまったので備忘録。
[参考記事](#参考記事)でおおよそいけるのですが、もう少し躓いたことがあったので書き起こし。
（OSはWindows 10です。）

# HTTPエラーが出てきたよ
具体的には、こんなエラー文が出てきました。
```:コマンドプロンプト
$ conda install hogehoge
Collecting package metadata (current_repodata.json): failed

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <........>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
'https://conda.anaconda.org/.......'
```
ネット自体は普通に使えてるし、anacondaをブロックするわけもなし、ということで、これはプロキシあたりが怪しいなと思いつきました。

会社や大学などの環境でやっていると、外部とのやりとりにプロキシを嚙ませている場合がほとんどです。
anacondaでのライブラリインストールも当然外部のネットを通じて行うのでプロキシを経由するわけですが、その設定が入っていない場合にこのようなエラーが出ます。

# 解決策
こんなときは、anacondaのフォルダ直下から`.condarc`ファイルを探すか、なければ作って、ここにプロキシサーバの設定を書き込むことで解決できました。
自分で作成する場合は、右クリックで「新規作成」から「メモ帳」などを選択して、ファイル名を変えてあげればOKです。
ちなみにanacondaのフォルダは、大抵は`C:`直下あるいは`C:\Users\[ユーザー名]`の中に`/Anaconda3`（あるいは`/Miniconda3`）フォルダがあるかと思います。


そして中身は、
```:.condarc
proxy_servers:
    http: http://ユーザー名@プロキシサーバ名:ポート番号
    https: https://ユーザー名@プロキシサーバ名:ポート番号
```
のように記述します。

そして、コマンドプロンプトで下記のコードを叩き、`proxy_servers:`の欄に自分で設定した内容が反映されていれば成功です。
```コマンドプロンプト
conda config --show
```

# 具体例
たとえば典型的な例で、画像のようになっていたとしましょう。
<img alt="proxy_setting.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1337870/11aa5502-f9bd-3789-0b2b-ca556c82bb2d.png" width="500" >

またユーザー名が「qiita」だったとしましょう。
すると、以下のようにすればOKです。

```:.condarc
proxy_servers:
    http: http://qiita@proxy:80
    https: https://qiita@proxy:80
```
コマンドプロンプトで`conda config --show`を叩いてみると、これが反映されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1337870/65bf6237-2511-ee4a-5926-c890b95c554f.png)


ちなみにユーザー名の調べ方は、まぁ色々あるかと思いますが、例えばエクスプローラーを開いて、
- `:C` -> `ユーザー`（あるいは`User`） -> `自分のユーザー名のフォルダ`

から確認することもできます。

次に、プロキシ名・ポート番号の調べ方ですが、
- 「プロキシの設定」 -> 「手動プロキシセットアップ」

を見ると、上の画像のように「プロキシサーバーを使う」がオンになっているはずで、そこにある「アドレス」「ポート」を確認すればOKです。


# 補足1
もしかすると、上記の設定をしてもまだエラーになるものの、メッセージが以下のように変わるかも知れません。
```:コマンドプロンプト
Collecting package metadata (current_repodata.json): failed

ProxyError: Conda cannot proceed due to an error in your proxy configuration.
Check for typos and other configuration errors in any '.netrc' file in your home directory,
any environment variables ending in '_PROXY', and any other system-wide proxy
configuration settings.
```
これはつまり、プロキシの設定自体は読み込めたものの、「プロキシの設定通りやったら通信できなかったんだけど、設定間違ってない？名前打ち間違えたとかサ」と言われています。

色んな可能性はあると思いますが、僕の場合は、`.condarc`の設定でhttpもhttpsも両方とも「http://...」としたところ通るようになりました。
もしかしたら「プロキシサーバから出た外部との通信はhttpsだけど、社内のプロキシサーバとやり取りするときはhttp通信」ということだったのかも知れません。

職場や研究室でanacondaを使う際にはプロキシ問題は起きがちなので、頭の隅に入れておきたいところですね。

# 補足2
上記を行ってみても、まだ「Failed to establish a new connection」のように通信に失敗するかも知れません。（というか別環境で私が経験しました）
これはもしかすると、うまく`.condarc`が読み込まれていないのかも知れません。
その時は、場当たり的な対応にはなりますが、直接コマンドプロンプトにプロキシ設定を教えてやりましょう。
以下のコードを叩いてみてください。
```:コマンドプロンプト
set HTTP_PROXY=http://ユーザー名@プロキシサーバ名:ポート番号
set HTTPS_PROXY=https://ユーザー名@プロキシサーバ名:ポート番号
```
「HTTP_PROXY」と「HTTP_PROXY」のどちらを設定すべきかは、エラー文を見るとHTTP通信かHTTPS通信かが書いてあるかも知れませんので、もし書いてあればそれに合わせて設定してやればよいでしょう。
また今回も[補足1](#補足1)と同じ現象が起こるかも知れませんので、「http://~」と「https://~」のどちらなのかも注意してみてください。



# 参考記事
- [anacondaでcondaするときにHTTPErrorが出るのそれproxyの問題じゃない？？](https://qiita.com/penguinz222/items/6efa624e763e5308b10e)
- [Anacondaのプロキシ設定](https://qiita.com/miyamoto_works/items/4676a7ee350210624ed9)