Install cairosvg for python3 on el7
I wanted to install cairosvg on my CentOS 7 terminal server. Come to find out, I had to install in using pip, because el7 only has cairosvg for the python2.
# yum list python-cairosvg Loaded plugins: ulninfo Installed Packages python-cairosvg.noarch 1.0.7-3.el7 @epel
So, I had to go get pip3. Enable the correct repos when installing pip3 and the dependencies for cairosvg.
yum --enablerepo=epel,updates install python36-pip cairo python36-devel libffi-devel
Use the http proxy when calling pip3 to update itself.
$ sudo https_proxy=http://10.123.456.789:3128 pip3 install --upgrade pip
And then, installing cairosvg failed.
# https_proxy=http://10.123.456.789:3128 pip3 install cairosvg Collecting cairosvg Using cached https://files.pythonhosted.org/packages/fd/97/d0f51b1022aecdc3b77385daea0292f3978ec26fee31e65e8a1592ebeff1/CairoSVG-2.4.0-py3-none-any.whl Collecting defusedxml (from cairosvg) Using cached https://files.pythonhosted.org/packages/06/74/9b387472866358ebc08732de3da6dc48e44b0aacd2ddaa5cb85ab7e986a2/defusedxml-0.6.0-py2.py3-none-any.whl Collecting cairocffi (from cairosvg) Using cached https://files.pythonhosted.org/packages/0f/0f/7e21b5ddd31b610e46a879c0d21e222dd0fef428c1fc86bbd2bd57fed8a7/cairocffi-1.0.2.tar.gz ERROR: Complete output from command python setup.py egg_info: ERROR: warning: no previously-included files found matching 'setup.pyc' warning: no previously-included files matching 'yacctab.*' found under directory 'tests' warning: no previously-included files matching 'lextab.*' found under directory 'tests' warning: no previously-included files matching 'yacctab.*' found under directory 'examples' warning: no previously-included files matching 'lextab.*' found under directory 'examples' zip_safe flag not set; analyzing archive contents... pycparser.ply.__pycache__.lex.cpython-36: module references __file__ pycparser.ply.__pycache__.lex.cpython-36: module MAY be using inspect.getsourcefile pycparser.ply.__pycache__.yacc.cpython-36: module references __file__ pycparser.ply.__pycache__.yacc.cpython-36: module MAY be using inspect.getsourcefile pycparser.ply.__pycache__.yacc.cpython-36: module MAY be using inspect.stack pycparser.ply.__pycache__.ygen.cpython-36: module references __file__ Installed /tmp/pip-install-lxiyvrgx/cairocffi/.eggs/pycparser-2.19-py3.6.egg Traceback (most recent call last): File "", line 1, in File "/tmp/pip-install-lxiyvrgx/cairocffi/setup.py", line 13, in 'cairocffi/ffi_build.py:ffi_pixbuf'] File "/usr/lib/python3.6/site-packages/setuptools/__init__.py", line 129, in setup return distutils.core.setup(**attrs) File "/usr/lib64/python3.6/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "/usr/lib/python3.6/site-packages/setuptools/dist.py", line 370, in __init__ k: v for k, v in attrs.items() File "/usr/lib64/python3.6/distutils/dist.py", line 281, in __init__ self.finalize_options() File "/usr/lib/python3.6/site-packages/setuptools/dist.py", line 529, in finalize_options ep.load()(self, ep.name, value) File "/tmp/pip-install-lxiyvrgx/cairocffi/.eggs/cffi-1.12.3-py3.6-linux-x86_64.egg/cffi/setuptools_ext.py", line 217, in cffi_modules add_cffi_module(dist, cffi_module) File "/tmp/pip-install-lxiyvrgx/cairocffi/.eggs/cffi-1.12.3-py3.6-linux-x86_64.egg/cffi/setuptools_ext.py", line 49, in add_cffi_module execfile(build_file_name, mod_vars) File "/tmp/pip-install-lxiyvrgx/cairocffi/.eggs/cffi-1.12.3-py3.6-linux-x86_64.egg/cffi/setuptools_ext.py", line 25, in execfile exec(code, glob, glob) File "cairocffi/ffi_build.py", line 26, in ffi = FFI() File "/tmp/pip-install-lxiyvrgx/cairocffi/.eggs/cffi-1.12.3-py3.6-linux-x86_64.egg/cffi/api.py", line 48, in __init__ import _cffi_backend as backend ImportError: /tmp/pip-install-lxiyvrgx/cairocffi/.eggs/cffi-1.12.3-py3.6-linux-x86_64.egg/_cffi_backend.cpython-36m-x86_64-linux-gnu.so: failed to map segment from shared object: Operation not permitted ---------------------------------------- ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-lxiyvrgx/cairocffi/
So I had to remount /tmp temporarily with exec, because I know it was mounted with noexec.
mount -o rw,remount,exec /tmp
And after I reran the install command, it worked!
# https_proxy=http://10.123.456.789:3128 pip3 install cairosvg [ TRUNCATED ] Installing collected packages: pycparser, cffi, cairocffi, webencodings, tinycss2, cssselect2, defusedxml, cairosvg Running setup.py install for pycparser ... done Running setup.py install for cairocffi ... done
References
- https://cairosvg.org/documentation/
- Original research
Comments