If you encounter this error trying to install a pip module or compile a program under the console you surely miss OpenSSL development packages!
pip also may build a packages in your system and it could depend on generic library headers like in this case OpenSSL, which the installer (pip) won’t bring them and it will output an error as you can see
myuser@srv # sudo pip install pycurl pygeoip psutil Collecting pycurl Using cached https://files.pythonhosted.org/packages/e8/e4/0dbb8735407189f00b33d84122b9be52c790c7c3b25286826f4e1bdb7bde/pycurl-7.43.0.2.tar.gz Requirement already satisfied (use --upgrade to upgrade): pygeoip in /usr/local/lib/python2.7/dist-packages Requirement already satisfied (use --upgrade to upgrade): psutil in /usr/lib/python2.7/dist-packages Building wheels for collected packages: pycurl Running setup.py bdist_wheel for pycurl ... error Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-AbCshS/pycurl/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmpqVNq1upip-wheel- --python-tag cp27: Using curl-config (libcurl 7.47.0) running bdist_wheel 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 x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPYCURL_VERSION="7.43.0.2" -DHAVE_CURL_SSL=1 -DHAVE_CURL_OPENSSL=1 -DHAVE_CURL_SSL=1 -I/usr/include/python2.7 -c src/docstrings.c -o build/temp.linux-x86_64-2.7/src/docstrings.o In file included from src/docstrings.c:4:0: src/pycurl.h:164:28: fatal error: openssl/ssl.h: No such file or directory compilation terminated. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Failed building wheel for pycurl Running setup.py clean for pycurl Failed to build pycurl Installing collected packages: pycurl Running setup.py install for pycurl ... error Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-AbCshS/pycurl/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-oea_jq-record/install-record.txt --single-version-externally-managed --compile: Using curl-config (libcurl 7.47.0) 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 x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPYCURL_VERSION="7.43.0.2" -DHAVE_CURL_SSL=1 -DHAVE_CURL_OPENSSL=1 -DHAVE_CURL_SSL=1 -I/usr/include/python2.7 -c src/docstrings.c -o build/temp.linux-x86_64-2.7/src/docstrings.o In file included from src/docstrings.c:4:0: src/pycurl.h:164:28: fatal error: openssl/ssl.h: No such file or directory compilation terminated. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-AbCshS/pycurl/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-oea_jq-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-AbCshS/pycurl/ You are using pip version 8.1.1, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command
We highlighted the important line and here it is again:
src/pycurl.h:164:28: fatal error: openssl/ssl.h: No such file or directory
It means you are missing the OpenSSL headers (i.e. development headers), which in Ubuntu is “libssl-dev” and in CentOS 6/7 is “openssl-devel”
Here is Ubuntu installation
myuser@srv # sudo apt install libssl-dev Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: libtirpc1 linux-headers-3.13.0-24 linux-headers-3.13.0-24-generic linux-image-3.13.0-24-generic linux-image-extra-3.13.0-24-generic Use 'apt autoremove' to remove them. The following additional packages will be installed: libssl-doc zlib1g-dev The following NEW packages will be installed: libssl-dev libssl-doc zlib1g-dev 0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded. Need to get 2,591 kB of archives. After this operation, 10.5 MB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libssl-dev amd64 1.0.2g-1ubuntu4.14 [1,345 kB] Get:2 http://security.ubuntu.com/ubuntu xenial-updates/main amd64 zlib1g-dev amd64 1:1.2.8.dfsg-2ubuntu4.1 [168 kB] Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libssl-doc all 1.0.2g-1ubuntu4.14 [1,078 kB] Fetched 2,591 kB in 1s (2,057 kB/s) Selecting previously unselected package zlib1g-dev:amd64. (Reading database ... 128888 files and directories currently installed.) Preparing to unpack .../zlib1g-dev_1%3a1.2.8.dfsg-2ubuntu4.1_amd64.deb ... Unpacking zlib1g-dev:amd64 (1:1.2.8.dfsg-2ubuntu4.1) ... Selecting previously unselected package libssl-dev:amd64. Preparing to unpack .../libssl-dev_1.0.2g-1ubuntu4.14_amd64.deb ... Unpacking libssl-dev:amd64 (1.0.2g-1ubuntu4.14) ... Selecting previously unselected package libssl-doc. Preparing to unpack .../libssl-doc_1.0.2g-1ubuntu4.14_all.deb ... Unpacking libssl-doc (1.0.2g-1ubuntu4.14) ... Processing triggers for man-db (2.7.5-1) ... /usr/bin/mandb: can't open /usr/share/man/man1/atop.1: Permission denied Setting up zlib1g-dev:amd64 (1:1.2.8.dfsg-2ubuntu4.1) ... Setting up libssl-dev:amd64 (1.0.2g-1ubuntu4.14) ... Setting up libssl-doc (1.0.2g-1ubuntu4.14) ...
And here is the “pip” installation of the python modules, which we could not install before:
myuser@srv # sudo pip install pycurl pygeoip psutil Collecting pycurl Using cached https://files.pythonhosted.org/packages/e8/e4/0dbb8735407189f00b33d84122b9be52c790c7c3b25286826f4e1bdb7bde/pycurl-7.43.0.2.tar.gz Requirement already satisfied (use --upgrade to upgrade): pygeoip in /usr/local/lib/python2.7/dist-packages Requirement already satisfied (use --upgrade to upgrade): psutil in /usr/lib/python2.7/dist-packages Building wheels for collected packages: pycurl Running setup.py bdist_wheel for pycurl ... done Stored in directory: /root/.cache/pip/wheels/d2/85/ae/ebf5ff0f1368869d082b4863df492bf54c661bf6306a2bdfde Successfully built pycurl Installing collected packages: pycurl Successfully installed pycurl-7.43.0.2 You are using pip version 8.1.1, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
Here is the package in CentOS 6/7
yum install -y openssl-devel