現象
pipenv install requests
を行ったところ、
下記のようなエラーが出力された。
[pipenv.exceptions.ResolutionFailure]: File "/Users/username/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pipenv/utils.py", line 395, in resolve [pipenv.exceptions.ResolutionFailure]: raise ResolutionFailure(message=str(e)) [pipenv.exceptions.ResolutionFailure]: pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches requests [pipenv.exceptions.ResolutionFailure]: No versions found [pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies. First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again. Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation. Hint: try $ pipenv lock --pre if it is a pre-release dependency. ERROR: ERROR: Could not find a version that matches requests No versions found Was https://pypi.org/simple reachable?
ちなみに、pip
を使ってインストールしようとした場合も
下記のようなエラーが出力されてしまった。
pip install requests pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Collecting requests 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/requests/ 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/requests/ 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/requests/ 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/requests/ 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/requests/ Could not fetch URL https://pypi.org/simple/requests/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/requests/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping Could not find a version that satisfies the requirement requests (from versions: ) No matching distribution found for requests 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
エラー文言を見ると
「SSLモジュールが有効ではないため、HTTPS接続できません」
と言われている。
この時利用していたバージョン
$ python --version Python 3.7.3 $ pip -V pip 19.0.3 from /Users/username/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip (python 3.7)
pipでインストールする際の解決策
pip
でインストールすることに関しては、
pythonのバージョンを上げることで解決できた。
私はpyenv
でディレクトリごとPythonのバージョンを管理しているので、pyenv
によるバージョン指定を行う。
$ pyenv local 3.8.5 $ python --version Python 3.8.5 $ pip install requests Collecting requests Using cached requests-2.24.0-py2.py3-none-any.whl (61 kB) Requirement already satisfied: certifi>=2017.4.17 in /Users/username/.pyenv/versions/3.8.5/lib/python3.8/site-packages (from requests) (2020.6.20) Requirement already satisfied: chardet<4,>=3.0.2 in /Users/username/.pyenv/versions/3.8.5/lib/python3.8/site-packages (from requests) (3.0.4) Requirement already satisfied: idna<3,>=2.5 in /Users/username/.pyenv/versions/3.8.5/lib/python3.8/site-packages (from requests) (2.10) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/username/.pyenv/versions/3.8.5/lib/python3.8/site-packages (from requests) (1.25.10) Installing collected packages: requests Successfully installed requests-2.24.0 WARNING: You are using pip version 20.1.1; however, version 20.2.2 is available. You should consider upgrading via the '/Users/username/.pyenv/versions/3.8.5/bin/python3.8 -m pip install --upgrade pip' command. $
しかし、これだけではpipenv
によるインストール時の問題までは
解決しなかった。
$ pipenv --rm $ pipenv lock --clear $ pipenv install $ pipenv install requests Installing requests… Error: An error occurred while installing requests! Error text: Could not fetch URL https://pypi.org/simple/requests/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/requests/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 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/requests/ 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/requests/ 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/requests/ 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/requests/ 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/requests/ ERROR: Could not find a version that satisfies the requirement requests (from -r /var/folders/6r/q2cbhnr134sbxq1f1_405r5r0000gn/T/pipenv-dzx_5e5v-requirements/pipenv-1wj7o9c1-requirement.txt (line 1)) (from versions: none) ERROR: No matching distribution found for requests (from -r /var/folders/6r/q2cbhnr134sbxq1f1_405r5r0000gn/T/pipenv-dzx_5e5v-requirements/pipenv-1wj7o9c1-requirement.txt (line 1)) ✘ Installation Failed
まだSSL証明書で怒られている。
pipenvでインストールする際の解決策
これの原因は、Pipfile
に記載されているPythonのバージョンが3.7
に固定されていることでした。
変更前Pipfile
[source] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.7"
バージョン3.7
が指定されている状態だと、--python
オプションによるプロジェクトの初期化でも
下記のようなwarningが出現する。
$ pipenv --python 3.8 # 中略 Warning: Your Pipfile requires python_version 3.7, but you are using 3.8.5 (/Users/username/.local/share/v/a/bin/python). $ pipenv --rm and rebuilding the virtual environment may resolve the issue. $ pipenv check will surely fail.
そのため、Pipfile
で記載されいてるPythonのバージョンを
直接編集し、再度初期化を行った。(3.7
→3.8
)
変更後Pipfile
[source] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.8"
$ pipenv --rm $ pipenv lock --clear $ pipenv --python 3.8 # warningが出なくなった $ pipenv install requests Installing requests… Adding requests to Pipfile's [packages]… ✔ Installation Succeeded Pipfile.lock (db4242) out of date, updating to (fbd99e)… Locking [dev-packages] dependencies… Locking [packages] dependencies… Building requirements... Resolving dependencies... ✔ Success! Updated Pipfile.lock (fbd99e)! Installing dependencies from Pipfile.lock (fbd99e)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run.
まとめ
- Pythonを
3.8
にバージョンアップする pip
やpipenv
をそれに合わせたバージョンにする(pipは自動的にPythonのバージョンにひきづられる)Pipfile
のバージョンも3.8
にしておく