Python 3.6 can find cairo libs but not Python 2.7
Peter Otten
__peter__ at web.de
Fri Jul 13 10:28:32 EDT 2018
D'Arcy Cain wrote:
> On 2018-07-13 08:05 AM, Peter Otten wrote:
>> D'Arcy Cain wrote:
>>> Nope. Both are 64 bit.
>>
>> Just to be 100% sure, what does
>>
>> $ python2.7 -c 'import struct; print(struct.calcsize("l"))'
>>
>> $ python3.6 -c 'import struct; print(struct.calcsize("l"))'
>>
>> print?
>
> $ python2.7 -c 'import struct; print(struct.calcsize("l"))'
> 8
> $ python3.6 -c 'import struct; print(struct.calcsize("l"))'
> 8
>
>> If both print 8, what is sys.platform? (This is just that I can look at
>> the right branch of the ctypes.util source for differences)?
>
> $ python2.7 -c 'import sys; print(sys.platform)'
> netbsd7
> $ python3.6 -c 'import sys; print(sys.platform)'
> netbsd7
>
> Thanks for checking this.
As far as I can see -- without having access to a netbsd machine -- this
leads to the standard 'posix' implementation of find_library() which in both
Python 2 and 3 runs /sbin/ldconfig and then searches its output with a
regex.
On my (linux) machine that regex is the same for both python 2.7 and 3.6:
$ python3.6 -c 'import sys; sys.platform="netbsd7"; from ctypes import util;
print(util.find_library("cairo"))'
XXX b'\\s+(libcairo\\.[^\\s]+)\\s+\\(libc6,x86-64'
libcairo.so.2
$ python2.7 -c 'import sys; sys.platform="netbsd7"; from ctypes import util;
print(util.find_library("cairo"))'
YYY '\\s+(libcairo\\.[^\\s]+)\\s+\\(libc6,x86-64'
libcairo.so.2
Given the implementation
def find_library(name):
return _findSoname_ldconfig(name) or
_get_soname(_findLib_gcc(name))
you might try calling _findSoname_ldconfig() directly -- if it fails for
both 2.7 and 3.6 the next step would be to have a look at the fallback.
More information about the Python-list
mailing list