現象
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
にしておく