[issue16326] distutils build_ext fails to set library_dirs in 2.7.2 on Linux
Andy Salnikov added the comment: OK, I see the problem. Do you think it would help if it tested both sys.executable and its symlynk-resolved path against sys.exec_prefix like this: if sys.executable.startswith(os.path.join(sys.exec_prefix, bin)) or os.path.realpath(sys.executable).startswith(os.path.join(sys.exec_prefix, bin)): # building third party extensions self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) else: # building python standard extensions self.library_dirs.append('.') Alternatively one can reverse the test. I guess that 'else:' is supposed to apply when one builds new Python installation? Where does the sys.executable points to in this case? Is there any other (more reliable) way to figure out that the standard extensions are being built instead of third-party modules? Andy -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue16326 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue16326] distutils build_ext fails to set library_dirs in 2.7.2 on Linux
Andy Salnikov added the comment: Hi Éric, I am attaching a patch that fixes the problem. The patch is tiny, basically 1-line. This replaces the direct use of sys.executable with the symlink-resolved version of the same path. I made the change for linux/unix platforms and also for cygwin/atheos (I'm sure cygwin has symlinks, not sure if atheos does but resolving symlinks can't hurt in general). The patch was created from default hg branch (3.4.0a0 I guess), I have built it and tested in my simple setup. The problem that we have (in 2.7) is indeed reproducible without this patch and it is fixed with this patch applied. Concerning the unit test - I'm not sure how to write one but if you have suggestions I could try. The complications in this case are that python needs to be installed in its configured location and the symlink needs to be created outside python install directory which points to the installed interpreter. If unit test could handle this then it might be possible. I did not update any documentation, could not find any place to mention this change. Sure you will know better what else is needed to be updated. I'd be happy to help you with whatever else is necessary to commit this patch. Cheers, Andy -- keywords: +patch Added file: http://bugs.python.org/file27800/distutils-sysexecutable.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue16326 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue16326] distutils build_ext fails to set library_dirs in 2.7.2 on Linux
Andy Salnikov added the comment: I never submitted any patch to Python, but unless somebody more experienced wants to contribute I can try. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue16326 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue16326] distutils build_ext fails to set library_dirs in 2.7.2 on Linux
New submission from Andy Salnikov: Hi, when trying to build extension modules with distutils I ran into a problem that linking fails with an errors like: gcc -pthread -shared -L build/temp.linux-x86_64-2.7/h5py/defs.o -L/reg/g/psdm/sw/external/hdf5/1.8.4p1/x86_64-rhel6-gcc44-opt/lib -L. -Wl,-R/reg/g/psdm/sw/external/hdf5/1.8.4p1/x86_64-rhel6-gcc44-opt/lib -lhdf5 -lpython2.7 -o build/lib.linux-x86_64-2.7/h5py/defs.so /usr/bin/ld: cannot find -lpython2.7 collect2: ld returned 1 exit status For some reason location of the python library is not added to the command line with -L option. I tracked the reason down to a particular environment that we have, in out environment python executable found in a $PATH is a symbolic link to a binary installed in some non-standard location. I believe this piece of code in build_ext.py fails to realize this: if sys.executable.startswith(os.path.join(sys.exec_prefix, bin)): # building third party extensions self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) else: # building python standard extensions self.library_dirs.append('.') apparently sys.executable in our case refers to a symlink path, while sys.exec_prefix refers to actual installation directory. I think fix for our case should be easy (I can't say about other cases which may be broken by this logic), one just need to apply os.path.realpath() to sys.executable before comparing it to sys.exec_prefix. Andy -- assignee: eric.araujo components: Distutils messages: 173796 nosy: Andy.Salnikov, eric.araujo, tarek priority: normal severity: normal status: open title: distutils build_ext fails to set library_dirs in 2.7.2 on Linux type: compile error versions: Python 2.7 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue16326 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com