PyCurl installed but not found PyCurl installed but not found curl curl

PyCurl installed but not found


I have managed (with some help) so solve the problem. The problem is that after installation, the pycurl.so is not copied to the site-packages for this virtualenv.

When installing via pip -v install pycurl, the following output is given:

Downloading/unpacking pycurl  Using version 7.19.0 (newest of versions: 7.19.0, 7.19.0, 7.18.2, 7.18.1, 7.16.4, 7.16.2.1, 7.16.2, 7.16.1, 7.15.5.1)  Downloading pycurl-7.19.0.tar.gz (71Kb): 71Kb downloaded  Running setup.py egg_info for package pycurl        Using curl-config (libcurl 7.19.7)    running egg_info    creating pip-egg-info/pycurl.egg-info    writing pip-egg-info/pycurl.egg-info/PKG-INFO    writing top-level names to pip-egg-info/pycurl.egg-info/top_level.txt    writing dependency_links to pip-egg-info/pycurl.egg-info/dependency_links.txt    writing manifest file 'pip-egg-info/pycurl.egg-info/SOURCES.txt'    warning: manifest_maker: standard file '-c' not found    reading manifest file 'pip-egg-info/pycurl.egg-info/SOURCES.txt'    reading manifest template 'MANIFEST.in'    writing manifest file 'pip-egg-info/pycurl.egg-info/SOURCES.txt'Installing collected packages: pycurl  Running setup.py install for pycurl    Using curl-config (libcurl 7.19.7)    running install    running build    running build_py    creating build    creating build/lib.linux-x86_64-2.7    creating build/lib.linux-x86_64-2.7/curl    copying python/curl/__init__.py -> build/lib.linux-x86_64-2.7/curl    running build_ext    building 'pycurl' extension    creating build/temp.linux-x86_64-2.7    creating build/temp.linux-x86_64-2.7/src    gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DHAVE_CURL_SSL=1 -I/opt/python2.7/include/python2.7 -c src/pycurl.c -o build/temp.linux-x86_64-2.7/src/pycurl.o    src/pycurl.c:85: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"    src/pycurl.c: In function ‘do_multi_info_read’:    src/pycurl.c:2843: warning: call to ‘_curl_easy_getinfo_err_string’ declared with attribute warning: curl_easy_getinfo expects a pointer to char * for this info    src/pycurl.c: In function ‘multi_socket_callback’:    src/pycurl.c:2355: warning: call to ‘_curl_easy_getinfo_err_string’ declared with attribute warning: curl_easy_getinfo expects a pointer to char * for this info    In function ‘util_curl_unsetopt’,        inlined from ‘do_curl_unsetopt’ at src/pycurl.c:1551:    src/pycurl.c:1476: warning: call to ‘_curl_easy_setopt_err_CURLSH’ declared with attribute warning: curl_easy_setopt expects a CURLSH* argument for this option    gcc -pthread -shared build/temp.linux-x86_64-2.7/src/pycurl.o -L/opt/python2.7/lib -lcurl -lpython2.7 -o build/lib.linux-x86_64-2.7/pycurl.so unknown option: --static-libs Usage: curl-config [OPTION] Available values for OPTION include: --ca ca bundle install path --cc compiler --cflags pre-processor and compiler flags --checkfor [version] check for (lib)curl of the specified version --features newline separated list of enabled features --help display this help and exit --libs library linking information --prefix curl install prefix --protocols newline separated list of enabled protocols --version output version information --vernum output the version information as a number (hexadecimal)    gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)    Copyright (C) 2010 Free Software Foundation, Inc.    This is free software; see the source for copying conditions.  There is NO    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    running install_lib    creating /home/ec2-user/.virtualenvs/xxx/lib/python2.7/site-packages/curl    copying build/lib.linux-x86_64-2.7/curl/__init__.py -> /home/ec2-user/.virtualenvs/xxx/lib/python2.7/site-packages/curl    byte-compiling /home/ec2-user/.virtualenvs/xxx/lib/python2.7/site-packages/curl/__init__.py to __init__.pyc    running install_data    copying ChangeLog -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying COPYING -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying COPYING2 -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying INSTALL -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying README -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying TODO -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl    copying doc/curlshareobject.html -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/html    copying doc/pycurl.html -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/html    copying doc/curlobject.html -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/html    copying doc/curlmultiobject.html -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/html    copying doc/callbacks.html -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/html    copying examples/retriever.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/file_upload.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/linksys.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/xmlrpc_curl.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/retriever-multi.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/sfquery.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying examples/basicfirst.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/examples    copying tests/test.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_ftp.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_share.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi5.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi_timer.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_post.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_gtk.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_post3.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_debug.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi4.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_cb.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi_vs_thread.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_stringio.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_xmlrpc.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi_socket_select.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi6.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi_socket.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/util.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi3.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_internals.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_post2.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_memleak.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_multi2.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_socketopen.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    copying tests/test_getinfo.py -> /home/ec2-user/.virtualenvs/xxx/share/doc/pycurl/tests    running install_egg_info    running egg_info    creating pycurl.egg-info    writing pycurl.egg-info/PKG-INFO    writing top-level names to pycurl.egg-info/top_level.txt    writing dependency_links to pycurl.egg-info/dependency_links.txt    writing manifest file 'pycurl.egg-info/SOURCES.txt'    warning: manifest_maker: standard file '-c' not found    reading manifest file 'pycurl.egg-info/SOURCES.txt'    reading manifest template 'MANIFEST.in'    writing manifest file 'pycurl.egg-info/SOURCES.txt'    Copying pycurl.egg-info to /home/ec2-user/.virtualenvs/xxx/lib/python2.7/site-packages/pycurl-7.19.0-py2.7.egg-info    running install_scripts    writing list of installed files to '/tmp/pip-lEWzoB-record/install-record.txt'Successfully installed pycurlCleaning up...  Removing temporary dir /home/ec2-user/.virtualenvs/xxx/build...

The key error here is: gcc -pthread -shared build/temp.linux-x86_64-2.7/src/pycurl.o -L/opt/python2.7/lib -lcurl -lpython2.7 -o build/lib.linux-x86_64-2.7/pycurl.so unknown option: --static-libs Usage: curl-config [OPTION] Available values for OPTION include: --ca ca bundle install path --cc compiler --cflags pre-processor and compiler flags --checkfor [version] check for (lib)curl of the specified version --features newline separated list of enabled features --help display this help and exit --libs library linking information --prefix curl install prefix --protocols newline separated list of enabled protocols --version output version information --vernum output the version information as a number (hexadecimal)

Which shows that curl-config is being called with the argument --static-libs, which it fails to recognise and instead prints it's 'usage' output. Most importantly, it is returning a non-error-code output which makes the compiler assume the pycurl.so compilation was successful.

This is described in more detail here

The solution to this problem was to modify the pycurl's setup.py and change line 101 to read --libs instead of --static-libs. This causes pycurl.so to be built and copied to the site-packages directory successfully.


An update for 2015 on this issue.
I ran into this installing Pycurl on a Mac running Yosemite. I changed line 150 in setup.py as shown below:

for option in ["--libs", "--static-libs"]:

to:

for option in ["--libs"]:

Then ran:

$>python setup.py install 

Installation worked perfectly after this!