Pycrl安装

注意:您需要在系统上安装python和libcurl才能使用或构建pycurl。curl/libcurl的一些RPM分布不包括构建pycurl所必需的一切,在这种情况下,您需要安装特定于开发人员的RPM,通常称为curl-dev。

迪斯妥尔

使用以下命令生成并安装pycurl::

(if necessary, become root)
tar -zxvf pycurl-$VER.tar.gz
cd pycurl-$VER
python setup.py install

$ver应替换为pycurl版本号,例如7.10.5。

请注意,安装脚本假定“curl config”可以位于路径设置中。如果curl config安装在路径之外,或者您希望强制安装使用特定版本的curl config,请使用“--curl config”命令行选项指定curl config的位置。例子::

python setup.py install --curl-config=/usr/local/bin/curl-config

如果libcurl与pycurl动态链接,则可能需要相应地更改ld_library_path环境变量。这通常只适用于安装了多个libcurl版本的情况,例如一个in/usr/lib和一个in/usr/local/lib。

SSL

pycurl要求它所基于的ssl库与libcurl相同,因此pycurl在运行时使用。PycURL setup.py 使用 curl-config 试图找出libcurl是针对哪个ssl库编译的,但是这并不总是有效的。如果pycurl无法确定正在使用的SSL库,它将打印类似以下内容的警告:

src/pycurl.c:137:4: warning: #warning "libcurl was compiled with SSL support, but configure could not determine which " "library was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests" [-Wcpp]

然后它将在运行时失败,如下所示:

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

要解决这个问题,你需要告诉我 setup.py 使用的SSL后端:

python setup.py --with-[openssl|gnutls|nss|mbedtls] install

注意:从pycurl 7.21.5开始,setup.py接受 --with-openssl 用于指示libcurl是针对openssl构建的。 --with-ssl 是一个别名 --with-openssl 并且由于向后兼容性而继续被接受。

你也可以问 setup.py 要从已安装的libcurl共享库获取SSL后端信息,请执行以下操作:

python setup.py--libcurl dll=libcurl.so

不合格的 libcurl.so 将使用系统libcurl,或者可以指定完整路径。

易于安装/pip

easy_install pycurl
pip install pycurl

如果需要指定备用curl配置,可以通过环境变量来完成:

export PYCURL_CURL_CONFIG=/usr/local/bin/curl-config
easy_install pycurl

这同样适用于SSL后端,如果需要指定它(请参见上面的SSL说明)::

export PYCURL_SSL_LIBRARY=[openssl|gnutls|nss|mbedtls]
easy_install pycurl

pip和缓存的pycurl包

如果您已经安装了pycurl,并尝试通过pip用不同的ssl选项重新安装它,例如,pip可以重新安装它以前编译的包,而不是用新指定的选项重新编译pycurl。更多详情请参见 this Stack Overflow post .

要强制pip重新编译pycurl,请运行:

# upgrade pip if necessary
pip install --upgrade pip

# remove current pycurl
pip uninstall pycurl

# set PYCURL_SSL_LIBRARY
export PYCURL_SSL_LIBRARY=nss

# recompile and install pycurl
pip install --compile pycurl

Windows

官方套餐

从7.43.0版开始,pycurl为Windows提供了二进制车轮。如果您使用的是python的官方发行版(即从https://www.python.org/下载的版本),并且您使用的是pip,那么您应该能够通过运行以下命令来安装pycurl:

pip安装pycurl

如果您不使用PIP,则可以在 download area .

32位和64位的pycurl版本都可用于Windows。

使用pycurl和自定义python构建

从7.21.5版开始,pycurl将针对除msvcrt之外的所有依赖项进行静态链接。这意味着,只要您的自定义python构建使用与相应的正式python构建相同版本的msvc,以及相同的msvcrt链接设置(/md et.al.),就应该能够使用正式的pycurl包。

如果您的python构建使用了不同的msvcrt设置或与正式的python构建不同的msvc版本,则需要从源代码编译pycurl。

目前,官方pycurl包是根据以下Python版本构建的:

  • 2.7.10

  • 3.2.5

  • 3.3.5

  • 3.4.3

  • 3.5.2

  • 3.6.0

如果pycurl和python使用的C运行库(msvcrt.dll)版本不匹配,则在尝试导入时将收到如下消息 pycurl 模块:

ImportError: DLL load failed: The specified procedure could not be found.

要确定您的python使用的msvcrt版本,请使用 application profiling feature 属于 Dependency Walker 寻找 msvcrt.dll variants 正在加载。你可能会发现 the entire thread starting here 乐于助人。

从源代码生成

从源代码构建pycurl并不适合胆小的人,因为可能有很多依赖项,并且每个依赖项都有自己的目录结构、配置样式、参数和怪癖。另外,不同的依赖项对于MSVCRT的使用有不同的设置,并且应用程序的所有部分必须在单个设置上达成一致。如果您决定从源代码构建pycurl,那么建议您查看 winbuild.py 脚本-它用于构建官方二进制文件,并包含大量用于编译pycurl对Windows的依赖关系的信息。

如果您是从源代码处编译pycurl,建议您也从源代码处编译其所有依赖项。使用预编译的库可能会导致在生成的pycurl二进制文件中混合多个msvcrt版本,这将是不好的。

如果pycurl要针对其依赖项进行静态链接,则必须修补openssl以链接到msvcrt的dll版本。这有一个补丁在 winbuild pycurl源目录。

对于最小的构建,您只需要libcurl源代码。按照其Windows生成说明生成库的静态版本或dll版本,然后按如下方式配置pycurl以使用它:

python setup.py --curl-dir=c:\dev\curl-7.33.0\builds\libcurl-vc-x86-release-dll-ipv6-sspi-spnego-winssl --use-libcurl-dll

注意 --curl-dir 必须指向的不是libcurl源,而是头和已编译的库。

如果libcurl和python没有链接到同一个精确的C运行时(版本号,static/dll,单线程/多线程),则必须使用 --avoid-stdio 选项(见下文)。

其他Windows Setup.py选项:

  • --use-libcurl-dll :针对libcurl dll生成,如果没有给定,则将静态针对libcurl生成pycurl。

  • --libcurl-lib-name=libcurl_imp.lib :为libcurl导入库指定其他名称。默认值为 libcurl.lib 它适用于静态链接,有时也是动态链接的正确选择。动态链接的另一种可能性是 libcurl_imp.lib .

  • --with-openssl :对openssl生成libcurl时使用openssl加密锁。

  • --with-ssl :的旧别名 --with-openssl .

  • --openssl-lib-name="" :为包含加密锁的openssl导入库指定其他名称。对于openssl 1.1.0+,应将其设置为此处给出的空字符串。

  • --avoid-stdio :在Windows上,进程及其使用的每个库都可以链接到自己的C运行时版本(MSVCRT)。一个C运行时的文件指针不能传递给另一个C运行时。此选项防止直接将文件指针从python传递到libcurl,从而允许针对不同的C运行时链接python和libcurl。当python文件对象直接被赋予curlot-readdata、curlot-writedata或curlot-writeheader选项中的pycurl时,此选项可能会带来性能损失。此选项仅适用于python 2;在python 3上,文件对象不再公开C库文件指针,并且C运行时问题不存在。在Python3上,可以识别此选项,但不执行任何操作。你也可以给 --avoid-stdio pycurl_setup_options环境变量中的选项如下:

    PYCURL_SETUP_OPTIONS=--avoid-stdio pip install pycurl
    

好的 setup.py 使用的目标是 bdist_wininst 它生成一个可执行的安装程序,您可以运行它来安装pycurl。

您可能会发现以下邮件列表帖子很有用:

winbuild.py

此脚本用于生成正式的pycurl windows包。您可以使用它用自己的选项构建一个完整的包补充,或者修改它来构建您需要的单个包。

先决条件:

  • Git for Windows _.

  • 适当的 Python versions 安装。

  • Python <=3.2的MS Visual C++ 9/2008,Python 3.3或3.4的MS Visual C++ 10/2010,Python 3.5或3.6的MS Visual C++ 14/2015。尽管让64位编译器在某些速成版本中工作需要跳过几个环,但Visual Studio的速成版本仍然可以很好地解决这一问题。

  • nasm如果针对openssl构建libcurl。

  • 如果针对openssl构建libcurl,则为activeperl。与Git for Windows一起提供的Perl以与OpenSSL的构建脚本不兼容的方式处理路径中的前向和反斜杠。

winbuild.py 假设所有程序都安装在其默认位置,如果不是这样,请根据需要进行编辑。 winbuild.py 它本身可以与它支持的任何python一起运行-2.7或3.2到3.6。

GIT校验

为了从Git签出中构建pycurl,需要生成一些文件。在UNIX系统上,使用 make ::

make

要指定要编译的curl或ssl后端,请使用与easy-install/pip相同的环境变量,即 PYCURL_CURL_CONFIGPYCURL_SSL_LIBRARY .

要仅生成生成的文件,您可以运行:

make gen

如果你在窗户上,这个可能很方便。记住跑 make gen 每当你改变来源。

要生成文档,请运行:

make docs

生成文档需要 Sphinx 待安装。

有关SSL后端的说明

libcurl的功能因其编译所使用的SSL后端而异。例如,用户 reported problems 带有gnutls后端。在撰写本文时,一般来说,openssl后端具有最多的功能以及与其他软件的最佳兼容性。

如果您遇到了SSL问题,特别是如果您没有使用OpenSSL后端,您可以尝试在另一个SSL后端上重建libcurl和pycurl。

SSL证书包

默认情况下,libcurl和pycurl验证HTTPS服务器的SSL证书的有效性。这样做需要一个CA证书包,libcurl和大多数SSL库都不提供该包。

Here 对于如何构建自己的证书包是一个很好的资源。certifie.com还具有 prebuilt certificate bundle . 要使用证书包,请使用 CAINFOCAPATH PyCURL选项。