2.

pip 「TLS/SSL ... ssl module is not available」の原因と修正(OpenSSL 開発ヘッダ)

編集
この記事の要点
  • 原因: Python ビルド時に OpenSSL 開発ヘッダが無く ssl モジュール未組込
  • 対処: OS パッケージで OpenSSL 開発版(libssl-dev / openssl-devel)を入れて Python を再ビルド
  • pyenv 利用者は brew install openssl 等 + CFLAGS / LDFLAGS を設定して再 install
  • 緊急回避: pip --trusted-host pypi.org --trusted-host files.pythonhosted.org install パッケージ(推奨しない)
  • システム標準 Python を使うのが最も簡単(apt install python3-pip

エラー内容

WARNING: pip is configured with locations that require TLS/SSL,
however the ssl module in Python is not available.

ERROR: 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."))

原因

Python はビルド時に OS にある OpenSSL ヘッダ(openssl/ssl.h)を取り込んで ssl モジュールを組み込みます。ヘッダが無い状態でソースビルドした Python には ssl モジュールが入っておらず、pip が HTTPS で PyPI に接続できません。

典型的に起きる状況:

  • pyenv install / ./configure && make で Python をソースからビルド
  • その時点で OpenSSL 開発パッケージが OS に入っていなかった
  • 後から OpenSSL を入れても Python は再ビルドしないと有効化されない

対処1: OS の OpenSSL 開発版を入れて Python を再ビルド

Ubuntu / Debian

# 1. ビルドに必要なライブラリを入れる
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev \
    xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

# 2. pyenv の場合
pyenv uninstall 3.11.5
pyenv install 3.11.5
pyenv global 3.11.5

# 3. 検証
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
# → OpenSSL 3.0.2 ... のように表示されれば OK

pip install requests
# WARNING が出なければ成功

CentOS / RHEL / Rocky / AlmaLinux

sudo dnf install -y gcc make zlib-devel bzip2 bzip2-devel readline-devel \
    sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel

# pyenv の場合
pyenv uninstall 3.11.5
pyenv install 3.11.5

macOS (Homebrew + pyenv)

# OpenSSL を入れる
brew install openssl readline sqlite3 xz zlib tcl-tk

# 環境変数を設定して pyenv install
export LDFLAGS="-L$(brew --prefix openssl)/lib"
export CPPFLAGS="-I$(brew --prefix openssl)/include"
export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig"

pyenv uninstall 3.11.5
pyenv install 3.11.5

# 検証
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

対処2: システム Python に切り替える

ビルドが面倒なら、OS パッケージマネージャの Python を使うのが最も確実:

# Ubuntu / Debian
sudo apt install -y python3 python3-pip python3-venv

# CentOS / RHEL
sudo dnf install -y python3 python3-pip

# 仮想環境を作って隔離
python3 -m venv ~/venv
source ~/venv/bin/activate
pip install requests

対処3: ソース直 ./configure する場合

cd ~/Python-3.11.5
./configure --prefix=/usr/local --enable-optimizations \
    --with-openssl=/usr/local/openssl    # ★ OpenSSL のパスを明示

make -j$(nproc)
sudo make altinstall

python3.11 -c "import ssl; print(ssl.OPENSSL_VERSION)"

緊急回避: --trusted-host で証明書検証スキップ

セキュリティ上の理由で推奨しません。どうしても今すぐパッケージを入れたい場合のみ:

pip install --trusted-host pypi.org \
            --trusted-host files.pythonhosted.org \
            --trusted-host pypi.python.org \
            requests

# 永続化(非推奨)
cat > ~/.pip/pip.conf <

これは ssl モジュール無しでも動きますが、中間者攻撃で悪意あるパッケージを掴まされるリスクがあります。

Windows での同等エラー

Windows では公式インストーラーを使えば OpenSSL も同梱されており通常起きません。起きる場合:

  • 古い Python 2.7 / 3.4 等を使っている → 新しい Python 3.10+ に変更
  • Windows Defender / アンチウイルスが _ssl.pyd をブロック → 除外設定
  • システムの環境変数 PYTHONHOME が壊れている → 削除

根本確認コマンド

# Python が ssl モジュールを持っているか
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
# → ImportError: No module named ssl → 未組込
# → AttributeError: module 'ssl' has no attribute 'OPENSSL_VERSION' → 壊れている

# どこの Python を使っているか
which python3
ls -la $(which python3)

# pyenv 利用中か
pyenv version
pyenv versions

# OS の OpenSSL バージョン
openssl version

# Python ビルド時にどの OpenSSL を見たか
python3 -c "import ssl; print(ssl.OPENSSL_VERSION_INFO)"

FAQ

Q: 再ビルドしても直らない
A: 別の Python パス(/usr/local/bin/python3 等)が呼ばれている可能性。which -a python3 で全候補を確認し、PATH 順を見直してください。

Q: 社内 PyPI ミラーに HTTP で接続したい
A: --index-url http://internal.pypi/simple + --trusted-host internal.pypi。HTTPS 化を強く推奨。

Q: Docker イメージで再現する
A: FROM python:3.11-slim 等の公式イメージは ssl 同梱済。問題が起きるのは FROM alpine 等で apk add openssl-dev 忘れ。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ModuleNotFoundError: No module named '~'; '~' is not a package
  2. pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available
  3. ...AppData/Local/Microsoft/WindowsApps/python: Permission denied
  4. 【pycharm】connecting to console が終わらない
  5. can only concatenate str (not "NoneType") to str
  6. can only concatenate str (not "datetime.datetime") to str