The ctypes.util.find_library function seems broken in the Dec 2018 Anaconda2 release.
As workaround, I have copied ..../anaconda2/lib/python2.7/ctypes/util.py from the working prior Anaconda library into the new Anaconda.
Actual Behavior
With Anaconda2-2018.12-Linux-x86_64, this short demo.py code (required by weasyprint module)
should locate and return a filename for the cairo library.
fails. When you run the demo below you will see a directory returned, NOT a fllename.
/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/cairo << NO should be a (path/)filename
None << OK
None << OK
Traceback (most recent call last): << This is the crash on the import, that you get with weasyprint
File "x.py", line 6, in
import cairocffi as cairo
File "/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/python2.7/site-packages/cairocffi/init.py", line 41, in
cairo = dlopen(ffi, 'cairo', 'cairo-2', 'cairo-gobject-2')
File "/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/python2.7/site-packages/cairocffi/init.py", line 38, in dlopen
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2
Expected Behavior
Anaconda2-5.2.0-Linux-x86_64.sh gave the correct behavior:
The correct output observed with
Anaconda2-5.2.0-Linux-x86_64.sh is:
/tmp$ python demo.py
libcairo.so.2 << GREAT
None << OK
None << OK
And no exception at end. Successful import of cairocffi as cairo
The behavior of the prior Anaconda release. The documentation for ctypes.util.find_library is clear that the return value should be a pathname, NOT a directory only.
Curiously, when I look at the util.py source code github, I am not readily seeing the history on the code changes which have caused all this very new trouble.....
287,288c288,298
< return _findLib_prefix(_get_soname(_findLib_prefix(name))) or \
< _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
# When objdump is unavailable this returns None
so_name = _get_soname(_findLib_prefix(name)) or name
if so_name != name:
return _findLib_prefix(so_name) or \
_findLib_prefix(name) or \
_findSoname_ldconfig(name) or \
_get_soname(_findLib_gcc(name))
else:
return _findLib_prefix(name) or \
_findSoname_ldconfig(name) or \
_get_soname(_findLib_gcc(name))
The ctypes.util.find_library function seems broken in the Dec 2018 Anaconda2 release.
As workaround, I have copied ..../anaconda2/lib/python2.7/ctypes/util.py from the working prior Anaconda library into the new Anaconda.
Actual Behavior
With Anaconda2-2018.12-Linux-x86_64, this short demo.py code (required by weasyprint module) should locate and return a filename for the cairo library.
fails. When you run the demo below you will see a directory returned, NOT a fllename.
/tmp$ cat demo.py import ctypes.util print ctypes.util.find_library('cairo') print ctypes.util.find_library('cairo-2') print ctypes.util.find_library('libcairo-2') import cairocffi as cairo
/tmp$ python demo.py
/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/cairo << NO should be a (path/)filename None << OK None << OK Traceback (most recent call last): << This is the crash on the import, that you get with weasyprint File "x.py", line 6, in
import cairocffi as cairo
File "/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/python2.7/site-packages/cairocffi/init.py", line 41, in
cairo = dlopen(ffi, 'cairo', 'cairo-2', 'cairo-gobject-2')
File "/dors/capra_lab/users/mothcw/psbadmin/anaconda2/lib/python2.7/site-packages/cairocffi/init.py", line 38, in dlopen
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2
Expected Behavior
Anaconda2-5.2.0-Linux-x86_64.sh gave the correct behavior: The correct output observed with Anaconda2-5.2.0-Linux-x86_64.sh is:
/tmp$ cat demo.py import ctypes.util print ctypes.util.find_library('cairo') print ctypes.util.find_library('cairo-2') print ctypes.util.find_library('libcairo-2') import cairocffi as cairo
/tmp$ python demo.py libcairo.so.2 << GREAT None << OK None << OK And no exception at end. Successful import of cairocffi as cairo
The behavior of the prior Anaconda release. The documentation for ctypes.util.find_library is clear that the return value should be a pathname, NOT a directory only.
https://docs.python.org/3/library/ctypes.html#module-ctypes
Steps to Reproduce
See above
Anaconda or Miniconda version:
Anaconda2-2018.12-Linux-x86_64
Operating System:
Centos 7
conda info
conda list --show-channel-urls
Curiously, when I look at the util.py source code github, I am not readily seeing the history on the code changes which have caused all this very new trouble.....
.../anaconda2/lib/python2.7/ctypes$ diff util.prior_good.py util.new_bad.py 273a274