Building things with setup.py

Robert Kern robert.kern at gmail.com
Fri Sep 22 17:46:36 EDT 2006


James Stroud wrote:
> Robert Kern wrote:
>>> Sorry. To clarify, making libpython2.5a available in a 
>>> $LD_LIBRARY_PATH was necessary to build numpy and scipy.
>> I don't see how that could have affected anything. Static libraries 
>> aren't looked up in $LD_LIBRARY_PATH. Certainly not for build-time linking.
> 
> OK--new thing learned for the day. <rant>I try things until a build 
> works. I consider everything I do until acquiring a working build as 
> necessary. Going back to see exactly what I did to make things work is 
> not a viable option given that every new program I want requires my 
> building it and all of its dependencies--a consequence of the [adjective 
> deleted] beuracratic constraints (with regard to the machine on my 
> desktop) that have evolved here. These constraints are no doubt a 
> byproduct of the "Institute" part of my signature below, associated 
> paranoia, and over-worked sys-admins.</rant>

:-) I've always thought that a Kubuntu LiveCD would be a useful path around much 
of that nonsense, but I've fortunately not been forced to attempt it.

>> What do your environment variables look like when you build?
> 
> euler 2% echo $CPPFLAGS
> -I/data10/users/jstroud/Programs/include 
> -I/data10/users/jstroud/Programs/qt/include -I/usr/include 
> -I/data10/users/jstroud/Programs/include/freetype2/freetype
> euler 3% echo $LD_LIBRARY_PATH
> /data10/users/jstroud/Programs/lib:/data10/users/jstroud/Programs/qt/lib:/usr/lib:/usr/X11R6/lib/:/usr/local/lib:/usr/lib/gcc-lib/i386-redhat-linux/3.2.3:/data10/users/jstroud/Programs/ccp4-5.0.2/lib
> euler 4% echo $LDFLAGS
> -L/data10/users/jstroud/Programs/lib 
> -L/usr/lib/gcc-lib/i386-redhat-linux/3.2.3

Okay, this is possibly part of the problem. numpy.distutils handles FORTRAN code 
differently than other extension modules; this is why pure C extension modules 
both inside numpy and elsewehere were linking fine. Try unsetenving $CPPFLAGS 
and $LDFLAGS and adding those arguments to build_ext, if necessary.

Looking on line 516 of numpy/fcompiler/__init__.py (why there's a class 
definition in __init__.py, I'll never know), it does look like the linker flags 
which are carefully constructed by numpy.distutils are indeed overridden by the 
user's setting of $LDFLAGS.

The fact that this appears to be incompatible with how distutils does it for 
everything else is a bug, IMO, although it *is* a useful feature if you really 
do need to completely control the linker flags. That's probably what the 
implementor was thinking. Although, sadly, not documenting. He should be back 
from his honeymoon, now, so I'll raise the issue with him.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list