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|wolfssl|sectransp] install
注意:从pycurl 7.21.5开始,setup.py接受 --with-openssl
选项指示libcurl是根据OpenSSL/LibreSSL/BoringSSL构建的。 --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|sectransp]
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¶
目前还没有官方的二进制Windows软件包。您可以从源代码构建PycURL,也可以使用第三方二进制包。
从源代码生成¶
从源代码构建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
:当libcurl针对这些SSL后端构建libcurl时,请使用OpenSSL/libresl/BoringSSL加密锁。--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 Python 3.3或3.4的Visual C++ 9/2008,Python 3.5到3.8的MS Visual C++ C++ MS。visualstudio的速成版可以很好地解决这一问题,尽管在某些速成版中让64位编译器工作需要跨越几个障碍。
nasm如果针对openssl构建libcurl。
如果针对openssl构建libcurl,则为activeperl。与Git for Windows一起提供的Perl以与OpenSSL的构建脚本不兼容的方式处理路径中的前向和反斜杠。
winbuild.py
假设所有程序都安装在其默认位置,如果不是这样,请根据需要进行编辑。 winbuild.py
它本身可以与它支持的任何Python一起运行。
使用pycurl和自定义python构建¶
从7.21.5版本开始,PycURL的官方二进制包都静态链接到除MSVCRT之外的所有依赖项上。这意味着,只要您的自定义Python版本使用与相应的官方Python版本相同的MSVC版本以及相同的MSVCRT链接设置(/MD et.al.),官方的PycURL包应该可以工作。
如果您的python构建使用了不同的msvcrt设置或与正式的python构建不同的msvc版本,则需要从源代码编译pycurl。
如果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 乐于助人。
GIT校验¶
为了从Git签出中构建pycurl,需要生成一些文件。在UNIX系统上,使用 make
::
make
要指定要编译的curl或ssl后端,请使用与easy-install/pip相同的环境变量,即 PYCURL_CURL_CONFIG
和 PYCURL_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 . 要使用证书包,请使用 CAINFO
或 CAPATH
PyCURL选项。