試した環境
はじめに
この記事ではpip install
に失敗した問題とその解決方法を書きます。
なお、「Python 公式版」とは Python.org で配布されているバージョンのことを指し、
この呼び方は python.jp の以下の記事を参考にしました。
発生した問題
下記のコマンドで venv による仮想環境を作成し、仮想環境上にパッケージをインストールしようとします。 ここでは jupyterlab をインストールしようとしてますが、この問題は jupyterlab に限らず発生します。
$ py -m venv venv $ venv\Script\activate.bat (venv)$ pip install jupyterlab
するとpip install
実行時に以下のメッセージが出てパッケージのインストールに失敗します。
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Collecting jupyterlab WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/jupyterlab/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/jupyterlab/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/jupyterlab/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/jupyterlab/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/jupyterlab/ Could not fetch URL https://pypi.org/simple/jupyterlab/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/jupyterlab/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping ERROR: Could not find a version that satisfies the requirement jupyterlab (from versions: none) ERROR: No matching distribution found for jupyterlab WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
この問題が発生する Python 環境(インストール方法)
Python 公式版は何でもいいと思いますが、今回は chocolatey でインストールしました。
choco install python
Miniconda はインストーラでインストールしました。 インストール設定はすべてデフォルトです。 特に、"Register Miniconda3 as my default Python 3.8" にチェックが入っています。
原因
上記の方法でインストールした場合、 py Launcher が conda の Python を実行するようになります。 以下のコマンドで py Launcher が実行する Python を調べられます。
$ py -0p Installed Pythons found by py Launcher for Windows -3.8-64 C:\Users\____\miniconda3\python.exe *
したがって、 venv の仮想環境を作成する際にpy -m venv
で作成すると、
conda の Python で venv の仮想環境が作られてしまいます。
作成した環境でpython
を起動すると conda の Python であることが確認できます。
(venv)$ python Python 3.8.3 (default, May 19 2020, 06:50:17) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
おそらく conda では仮想環境はconda create
を使うことを想定しており、 venv を使った仮想環境はうまくいかないのでしょう。
解決策
ここでは2通りの解決策を示します。
解決策その1: py
ではなくpython
コマンドを使う
上記の方法でインストールした場合、python
コマンドに公式版の Python のパスが通っています。
$ where python C:\Python38\python.exe C:\Users\____\AppData\Local\Microsoft\WindowsApps\python.exe
なのでpy -m venv
ではなくpython -m venv
で仮想環境を作成します。
こうすることで公式版の Python で venv による仮想環境が作成でき、パッケージのインストールも無事行えます。
$ python -m venv venv $ venv\Script\activate.bat (venv)$ pip install jupyterlab
python
も公式版の Python であることが分かります。
(venv)$ python Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
解決策その2: Miniconda のインストール時に "Register Miniconda3 as my default Python 3.8" にチェックを入れずインストールする
Miniconda のインストール時に "Register Miniconda3 as my default Python 3.8" にチェックを入れずインストールした場合、 py Launcher が公式版の Python を実行するようになります。
$ py -0p Installed Pythons found by py Launcher for Windows -3.8-64 C:\Python38\python.exe *
この状態ならばpy -m venv
で公式版の Python で venv による仮想環境が作成でき、パッケージのインストールも無事行えます。
おわりに
公式版の Python で venv による仮想環境を作成するつもりで py Launcher を使ったのですが裏目に出てしまいました。
py Launcher は conda をインストールした時にはなく、
公式版の Python をインストールした時に使えるようになったので、
py
で公式版の Python が実行されるものだと思い込んでしまいました。
この問題が発生した時、最初は表示されたメッセージから SSL 関係が原因かと思いましたが、私のケースでは違うところに原因がありました。
表示されたメッセージでググると SSL 関連を変更する解決策も見つかるので、このメッセージが出る原因は色々あるようです。
この記事が色々考えられる原因の内の一つとして参考になればと思います。
今回は Miniconda で確認しましたが、おそらく Anaconda でも同様のことが言えるかと思います(未検証)。