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