On 06/19/2011 05:21 AM, Ralf Gommers wrote:
On Tue, Jun 14, 2011 at 5:28 AM, Bruce Southey <bsout...@gmail.com
<mailto:bsout...@gmail.com>> wrote:
On Mon, Jun 13, 2011 at 8:31 PM, Pauli Virtanen <p...@iki.fi
<mailto:p...@iki.fi>> wrote:
> On Mon, 13 Jun 2011 11:08:18 -0500, Bruce Southey wrote:
> [clip]
>> OSError:
>>
/usr/local/lib/python3.2/site-packages/numpy/core/multiarray.pyd:
cannot
>> open shared object file: No such file or directory
>
> I think that's a result of Python 3.2 changing the extension module
> file naming scheme (IIRC to a versioned one).
>
> The '.pyd' ending and its Unix counterpart are IIRC hardcoded to the
> failing test, or some support code in Numpy. Clearly, they
should instead
> ask Python how it names the extensions modules. This information
may be
> available somewhere in the `sys` module.
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org <mailto:NumPy-Discussion@scipy.org>
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
Pauli,
I am impressed yet again!
It really saved a lot of time to understand the reason.
A quick comparison between Python versions:
Python2.7: multiarray.so
Python3.2: multiarray.cpython-32m.so
<http://multiarray.cpython-32m.so>
Search for the extension leads to PEP 3149
http://www.python.org/dev/peps/pep-3149/
That looked familiar:
http://projects.scipy.org/numpy/ticket/1749
https://github.com/numpy/numpy/commit/ee0831a8
This is POSIX only which excludes windows. I tracked it down to the
list 'libname_ext' defined in file "numpy/ctypeslib.py" line 100:
libname_ext = ['%s.so' % libname, '%s.pyd' % libname]
On my 64-bit Linux system, I get the following results:
$ python2.4 -c "from distutils import sysconfig; print
sysconfig.get_config_var('SO')"
.so
$ python2.5 -c "from distutils import sysconfig; print
sysconfig.get_config_var('SO')"
.so
$ python2.7 -c "from distutils import sysconfig; print
sysconfig.get_config_var('SO')"
.so
$ python3.1 -c "from distutils import sysconfig;
print(sysconfig.get_config_var('SO'))"
.so
$ python3.2 -c "from distutils import sysconfig;
print(sysconfig.get_config_var('SO'))"
.cpython-32m.so
My Windows 32-bit Python2.6 install:
>>> from distutils import sysconfig
>>> sysconfig.get_config_var('SO')
'.pyd'
Making the bug assumption that other OSes including 32-bit and 64-bit
versions also provide the correct suffix, this suggest adding the
import and modification as:
import from distutils import sysconfig
libname_ext = ['%s%s' % (libname, sysconfig.get_config_var('SO'))]
Actually if that works for Mac, Sun etc. then 'load_library' function
could be smaller.
The issue is that libraries built as Python extensions have the extra
".cpython-mu32", but other libraries on your system don't. And
sysconfig.get_config_var('SO') is used for both. I don't see another
config var that allows to distinguish between the two. Unless on
platforms where it matters there are separate return values in
sysconfig.get_config_vars('SO'). What do you get for that on Linux?
The logic of figuring out the right extension string should not be
duplicated, distutils.misc_util seems like a good place for it. Can
you test if this works for you:
https://github.com/rgommers/numpy/tree/sharedlib-ext
Finally the test_basic2 in "tests/test_ctypeslib.py" needs to be
changed as well because it is no longer correct. Just commenting out
the 'fix' appears to work.
It works in the case of trying to load multiarray, but the function
under test would still be broken.
Ralf
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion
Okay,
So how do I get these changes and apply them to the release candidate?
(This part of the development/test workflow needs some attention.)
Bruce
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion