Mac OS 10.8上的pycurl错误

1 投票
2 回答
2047 浏览
提问于 2025-04-17 22:26

我通过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

转载自 使用OpenSSL时出现SSL后端错误

在阅读他们的安装文件后,我通过设置一个环境变量并重新安装解决了我的问题。

  • 首先,删除现有的pycurl安装

    可以用命令:pip uninstall pycurl

  • 接着,设置一个变量

    使用命令:export PYCURL_SSL_LIBRARY=openssl

  • 最后,安装pycurl

    用命令:pip install pycurl

可能还有其他解决方案,但这个方法在我的虚拟环境和pip安装中效果很好。

撰写回答