Mac OS 10.8上的pycurl错误
我通过pip安装了pycurl。
oczml:~ acid$ sudo pip install pycurl
Password:
Downloading/unpacking pycurl
Downloading pycurl-7.19.3.1.tar.gz (116kB): 116kB downloaded
Running setup.py egg_info for package pycurl
Using curl-config (libcurl 7.24.0)
Installing collected packages: pycurl
Running setup.py install for pycurl
Using curl-config (libcurl 7.24.0)
building 'pycurl' extension
clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -DPYCURL_VERSION="7.19.3.1" -DHAVE_CURL_SSL=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/pycurl.c -o build/temp.macosx-10.8-intel-2.7/src/pycurl.o
clang: warning: argument unused during compilation: '-mno-fused-madd'
src/pycurl.c:123:4: 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" [-W#warnings]
# warning \
^
1 warning generated.
src/pycurl.c:123:4: 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" [-W#warnings]
# warning \
^
src/pycurl.c:1555:26: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
int sockfd = PyInt_AsLong(fileno_result);
~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~
src/pycurl.c:1630:24: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
int ret_code = PyInt_AsLong(result);
~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~
src/pycurl.c:2447:31: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
val = PyLong_AsLong(PyTuple_GET_ITEM(t, j));
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/pycurl.c:3610:22: warning: implicit conversion loses integer precision: 'long' to '__darwin_suseconds_t' (aka 'int') [-Wshorten-64-to-32]
tv.tv_usec = (long)(timeout*1000000.0);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~
src/pycurl.c:4513:27: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
libcurl_version_len = strlen(libcurl_version);
~ ^~~~~~~~~~~~~~~~~~~~~~~
6 warnings generated.
clang -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.8-intel-2.7/src/pycurl.o -lcurl -o build/lib.macosx-10.8-intel-2.7/pycurl.so
Successfully installed pycurl
Cleaning up...
但是当我尝试导入pycurl时,出现了以下错误:
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
2 个回答
1
我之前也遇到过同样的问题,最后是这样解决的。
首先,我使用的是Python3和pip3,不过用pip也应该可以。
我发现我的电脑上没有安装或设置SSL,所以我去这个网站:https://www.openssl.org/source/,下载并安装了最新的OpenSSL。
安装的方式是老式的Unix方法,也就是下载一个gzip格式的文件。
tar -zxvf openssl-1.0.2n.tar.gz
(你的文件版本可能会不同)然后运行:
./Configure darwin64-x86_64-cc
(这个步骤是针对64位Mac系统的,其他系统可以正常运行./configure)
接着:
make
make test
sudo make install
(我用了sudo,因为可能需要创建一些文件夹)。现在你已经安装了OpenSSL。接下来需要安装PyCurl,并告诉它你的OpenSSL头文件的位置。我是这样做的:
pip3 install pycurl --global-option=build_ext --global-option="-L/{OpenSSL-install-directory}/lib" --global-option="-I/{OpenSSL-install-directory}/include"
把{OpenSSL-install-directory}替换成你实际的路径。我的是/usr/local/ssl:
pip3 install pycurl --global-option=build_ext --global-option="-L/usr/local/ssl/lib" --global-option="-I/usr/local/ssl/include"
然后它就安装好了,也能正常工作。
在整理这些信息时,我参考了以下资源:
2
在阅读他们的安装文件后,我通过设置一个环境变量并重新安装解决了我的问题。
首先,删除现有的pycurl安装
可以用命令:pip uninstall pycurl
接着,设置一个变量
使用命令:export PYCURL_SSL_LIBRARY=openssl
最后,安装pycurl
用命令:pip install pycurl
可能还有其他解决方案,但这个方法在我的虚拟环境和pip安装中效果很好。