【Python】libcurlを利用するPycURLのインストール

【Python】libcurlを利用するPycURLのインストール プログラミング

「Pythonでcurlと同じことがしたい」
「Pythonでcurlコマンド並の速度を実現したい」
「Requestsより高速なWebアクセスを行いたい」

このような場合には、PycURLがオススメです。
この記事では、PycURLについて解説しています。

本記事の内容

  • PycURLとは?
  • PycURLのシステム要件
  • PycURLのインストール
  • PycURLの動作確認

それでは、上記に沿って解説していきます。

PycURLとは?

PycURL は、 libcurlへのPython インターフェースです。
ざっくり言うと、PycURLはcurlコマンドと同じモノと言えます。

curlは、libcurlを本体としたコマンドラインツールです。
それのPython版が、PycURLとなります。
つまり、curlと同じようなことがPycURLで実現できます。

また、Webアクセスと言えば、PythonライブラリではRequestsが存在しています。

Requestsと比較すると、PycURLには次の利点があります。

  • 数倍速い(可能性がある)
  • HTTP以外のプロトコルへの対応
  • 多機能(暗号化、認証オプションの選択肢が多い)

しかし、PycURLはインストールがRequestsよりも複雑です。
その点では、PycURLは中級者以上を対象にしているかもしれません。

以上、PycURLについて説明しました。
次は、PycURLのシステム要件を確認します。

PycURLのシステム要件

現時点(2022年3月)でのPycURLの最新バージョンは、7.45.1となります。
この最新バージョンは、2022年3月13日にリリースされています。

PycURLのシステム要件は、以下。

  • OS
  • Python
  • libcurl
  • curl-config

それぞれを下記で説明します。

OS

サポートOSに関しては、以下となっています。

  • Windows
  • Linux

macOSは、対象外のようです。
Linuxで動くなら、macOSも問題なさそうですけどね。

また、今回はLinuxを対象にして検証を進めています。
WindowsとLinuxのインストールは、かなり異なります。

Python

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.5
  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

以下は、Python公式開発サイクルです。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Python公式開発サイクルと比較すると、PycURLは守備範囲が広いと言えます。
でも、我々としてはPython 3.7以降を利用しましょう。

libcurl

libcurlが必須となります。
libcurlが存在していないと、PycURLは動きません。

そして、システム要件として次のバージョンが指定されています。

libcurl 7.19.0 or better.

libcurlの有無は、次のコマンドで確認できます。
curlは、libcurlに依存しています。

curl -V

上記を実行して以下のように表示されれば、libcurlはインストール済みと言えます。

$ curl -V
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh/0.9.3/openssl/zlib nghttp2/1.41.0 librtmp/2.3
Release-Date: 2020-01-08
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

libcurl(curl)が未インストールなら、curlをインストールしましょう。
Ubuntuであれば、デフォルトでインストール済みのはずです。

あと、バージョンも指定されています。
バージョンに関しては、通常は意識する必要はありません。

curl-config

curl-configについては、次の記事で説明しています。

curl-configのインストールは、必須です。
PycURLはcurl-configを使って、libcurlが利用するSSLライブラリを特定しています。

以上、PycURLのシステム要件を説明しました。
次は、PycURLをインストールします。

PycURLのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.0.4
setuptools 60.9.3
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、PycURLのインストールです。
PycURLのインストールは、以下のコマンドとなります。

pip install pycurl

PycURLのインストールは、少しだけ時間がかかります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
pip        22.0.4
pycurl     7.45.1
setuptools 60.9.3
wheel      0.36.2

PycURLには、依存するパッケージが存在していません。
この結果を見ると、PycURLの既存環境への導入は容易と言えます。

ただし、これはPythonライブラリの依存関係上の話になります。
PycURLはcurl-config関連で、エラーが発生しやすいようです。

その場合は、次のようなエラーメッセージとなります。

error: subprocess-exited-with-error

これだけではよくわからないので、エラー内容をよく見ます。
そうすると、以下のような文言を確認できます。

Could not run curl-config: [Errno 2] No such file or directory: 'curl-config'

これは、「curl-config」コマンドが利用できないというエラーです。
そのため、事前にcurl-configはインストールしておきます。
パスが通っていることも確認しておきましょう。

以上、PycURLのインストールについて説明しました。
次は、PycURLの動作確認を行います。

PycURLの動作確認

PycURLを使って、HTTPレスポンスステータスコードを取得してみましょう。

import pycurl
from io import BytesIO

TARGET_URL = "https://example.com/"

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, TARGET_URL)
c.setopt(c.WRITEDATA, buffer)
c.perform()

# HTTP response code
print('Status: %d' % c.getinfo(c.RESPONSE_CODE))

# getinfo must be called before close.
c.close()

上記コードを実行すると、次のような結果となります。

Status: 200

次のようにアクセス先を変更します。

TARGET_URL = "https://example.com/notfund"

変更して実行した結果は、以下。

Status: 404

問題ありませんね。

以上、PycURLの動作確認を説明しました。

タイトルとURLをコピーしました