[PyQt] Wrong install name in dynamic libraries

Phil Thompson phil at riverbankcomputing.com
Sun Feb 9 10:23:08 GMT 2014


On 06-02-2014 7:44 pm, Colin McPhail wrote:
> Platform - PyQt5.2 Qt5.2 Python 3.3.3 Mac OS X 10.9.1
>
> The Mac OS X dynamic libraries installed in the site-packages 
> directory by
> the PyQt5 build system have incorrect install names recorded in them. 
> For
> example QtCore.so has an install name of 'libQtCore.dylib', as shown 
> by
>    otool -D QtCore.so
>
> The reason for this is that each library is created as 
> libQtxxx.dylib, copied
> to Qtxxx.so and then copied to .../site-packages/PyQt5/Qtxxx.so.  The 
> initial
> link command doesn't specify an install name and so the terminal name 
> of the
> output library ('libQtxxx.dylib') is used by default.
>
> This doesn't cause a problem in normal use of PyQt5.  However, a 
> recent post
> by David Cortesi indicated that attempts to freeze an application for
> distribution using cx_freeze failed because cx_freeze could not 
> locate
> libQtxxx.dylib files.  Off-list I suggested that David manually 
> correct the
> install names in his site-packages/PyQt5 direcory (using 
> install_name_tool
> -id commands) and he has indicated that the cx_freeze process was
> then able to
> complete.
>
> Below are two patches, for PyQt-gpl-5.2/configure.py and
> QScintilla-gpl-2.8/Python/configure.py respectively, that set each 
> dynamic
> library's install name to the full path of the library after 
> installation.
>
>                   PyQt-gpl-5.2/configure.py
> *** configure_orig.py	2014-02-04 15:43:08.000000000 +0000
> --- configure.py	2014-02-06 12:54:52.000000000 +0000
> ***************
> *** 2234,2239 ****
> --- 2234,2240 ----
>   }
>   macx {
>       QMAKE_LFLAGS += "-undefined dynamic_lookup"
> +     QMAKE_LFLAGS += "-install_name $$absolute_path($$PY_MODULE,
> $$target.path)"
>   }
>   '''
>
>                   QScintilla-gpl-2.8/Python/configure.py
> *** configure_orig.py	2014-02-05 22:43:08.000000000 +0000
> --- configure.py	2014-02-06 17:26:55.000000000 +0000
> ***************
> *** 747,752 ****
> --- 747,753 ----
>
>   macx {
>       QMAKE_LFLAGS += "-undefined dynamic_lookup"
> +     QMAKE_LFLAGS += "-install_name $$absolute_path($$PY_MODULE,
> $$target.path)"
>       QMAKE_POST_LINK =
> $$QMAKE_POST_LINK$$escape_expand(\\\\n\\\\t)$$quote(install_name_tool
> -change libqscintilla2.%s.dylib %s/libqscintilla2.%s.dylib
> $$PY_MODULE)
>   }
>   ''' % (QSCI_API_MAJOR, target_config.qsci_lib_dir, QSCI_API_MAJOR))
>
> I have rerun a PyQt5 and QScintilla installation and have confirmed 
> visually
> that the expected install names are now present in the dynamic 
> libraries
> installed into site-packages.
>
> -- Colin McPhail

Applied.

Thanks,
Phil


More information about the PyQt mailing list