在 Alpine Linux 上安装 pycurl 时出现“Could not 运行 curl-config: [Errno 2] No such file or directory”

“Could not run curl-config: [Errno 2] No such file or directory” when installing pycurl on Alpine Linux

我正在尝试通过以下方式安装 pycurl:

sudo pip install pycurl

它下载正常,但是当它运行时 setup.py 我得到以下回溯:

Downloading/unpacking pycurl
  Running setup.py egg_info for package pycurl
    Traceback (most recent call last):
      File "<string>", line 16, in <module>
      File "/tmp/pip-build-root/pycurl/setup.py", line 563, in <module>
        ext = get_extension()
      File "/tmp/pip-build-root/pycurl/setup.py", line 368, in get_extension
        ext_config = ExtensionConfiguration()
      File "/tmp/pip-build-root/pycurl/setup.py", line 65, in __init__
        self.configure()
      File "/tmp/pip-build-root/pycurl/setup.py", line 100, in configure_unix
        raise ConfigurationError(msg)
    __main__.ConfigurationError: Could not run curl-config: [Errno 2] No such file or directory
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 16, in <module>
  File "/tmp/pip-build-root/pycurl/setup.py", line 563, in <module>
    ext = get_extension()
  File "/tmp/pip-build-root/pycurl/setup.py", line 368, in get_extension
    ext_config = ExtensionConfiguration()
  File "/tmp/pip-build-root/pycurl/setup.py", line 65, in __init__
    self.configure()
  File "/tmp/pip-build-root/pycurl/setup.py", line 100, in configure_unix
    raise ConfigurationError(msg)

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

知道为什么会发生这种情况以及如何使用 Alpine Linux 解决这个问题吗?

找到了。我相信这行得通。

# Install packages
apk add --no-cache libcurl

# Needed for pycurl
ENV PYCURL_SSL_LIBRARY=openssl

# Install packages only needed for building, install and clean on a single layer
RUN apk add --no-cache --virtual .build-dependencies build-base curl-dev \
    && pip install pycurl \
    && apk del .build-dependencies

@irishcoder 我认为您需要在答案中添加 "python3-dev"。 运行 apk 添加 --no-cache --virtual .build-dependencies build-base curl-dev python3-dev \

我在基于 python:3.7.2-apline3.9 图像构建 Tornado 应用程序时遇到了同样的问题。正如 pycURL's install instructions

所指出的那样,我能够使用 curl-dev 包克服这个错误

pycURL下安装header:

NOTE: You need Python and libcurl installed on your system to use or build pycurl. Some RPM distributions of curl/libcurl do not include everything necessary to build pycurl, in which case you need to install the developer specific RPM which is usually called curl-dev.

这是 Dockerfile 的相关部分

RUN apk add --no-cache libcurl
RUN apk update \
    && apk add --virtual .build-deps \
        curl-dev \
    && pip install -e ./ \
    && apk --purge del .build-deps

如果您想通过 curl 验证可用的功能,我执行了以下操作。

docker exec -it <container_name> sh
apk add curl
curl --version

curl --version的输出类似于

curl 7.64.0 (x86_64-alpine-linux-musl) libcurl/7.64.0 OpenSSL/1.1.1b zlib/1.2.11 libssh2/1.8.1 nghttp2/1.35.1
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy

特别是对我来说,我对存在的 AsynchDNS 很感兴趣,所以我可以使用 Tornado 的 curl_httpclient