💬
【Python】pycURL で HTTP/3 を利用するための環境構築
Chromebook で pycURL の HTTP/3 対応のための環境構築をしました。ChatGPT の力を借りた記事です。
前提環境
OS: Debian Bookworm (Chromebook、bookworm-backports を追加)
Python: uv による管理(Python 3.13.3)
curl: 手動ビルド版 (GnuTLS + HTTP/3 対応) を ~/.local にインストール
Debian の nookworm-backports のリポジトリでは curl は GunTLS (libcurl3-gnutls) に依存しており、HTTP/3 を使えるはずなのですが、手元の環境では OpenSSL のままだったので、curlおよび pycURL を自分でビルドする必要がありました。
- curl(GnuTLS + HTTP/3 対応)を ~/.local にビルド
CURL_VERSION=8.13.0
PREFIX="$HOME/.local"
sudo apt install -y \
build-essential autoconf libtool pkg-config \
libgnutls28-dev libnghttp3-dev libngtcp2-dev \
libbrotli-dev libzstd-dev libidn2-dev libpsl-dev libev-dev
cd /tmp
wget https://curl.se/download/curl-${CURL_VERSION}.tar.xz
tar -xf curl-${CURL_VERSION}.tar.xz
cd curl-${CURL_VERSION}
./configure --prefix="$PREFIX" \
--with-gnutls \
--with-nghttp3 \
--with-ngtcp2 \
--enable-alt-svc \
--enable-http3
make -j$(nproc)
make install
確認:
~/.local/bin/curl -V
- libcurl の環境変数を設定(pycurl ビルド用)
export PYCURL_SSL_LIBRARY=gnutls
export LDFLAGS="-L$HOME/.local/lib"
export CPPFLAGS="-I$HOME/.local/include"
export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig"
export LD_LIBRARY_PATH="$HOME/.local/lib:$LD_LIBRARY_PATH"
export PATH="$HOME/.local/bin:$PATH"
- pycurl をソースからビルドしてインストール
pip uninstall pycurl -y
uv pip install --no-binary=:all: --no-cache-dir -v pycurl
- 動作確認(REPL)
>>> import pycurl
>>> pycurl.version_info()
(11, '8.13.0', ..., 'GnuTLS/3.7.9', ..., ('http', 'https', ...))
備考
curl-config の出力は GnuTLS である必要がある(curl-config --ssl-backends)
pycurl の共有オブジェクトにリンクされる libcurl を確認するには:
ldd $(python -c "import pycurl, os; print(os.path.abspath(pycurl.__file__))") | grep libcurl
source や . による環境変数の永続化は .sh スクリプトでは不可視なので、対話型で実行するか env.sh を . ./env.sh で読み込む形式が確実
Discussion