def get_qt_qml_files(qt_library_info): # No-op if requested Qt-based package is not available if qt_library_info.version is None: return [], [] # Not all PyQt5/PySide2 installs have QML files. In this case, # location['Qml2ImportsPath'] is empty. Furthermore, even if location # path is provided, the directory itself may not exist. # # https://github.com/pyinstaller/pyinstaller/pull/3229#issuecomment-359735031 # https://github.com/pyinstaller/pyinstaller/issues/3864 qmldir = qt_library_info.location['Qml2ImportsPath'] if not qmldir or not os.path.exists(qmldir): logger.warning( 'QML directory for %s, %r, does not exist. ' 'QML files not packaged.', qt_library_info.namespace, qmldir) return [], [] qml_rel_dir = os.path.join(qt_library_info.qt_rel_dir, 'qml') datas = [(qmldir, qml_rel_dir)] binaries = [ # Produce ``/path/to/Qt/Qml/path_to_qml_binary/qml_binary, # PyQt5/Qt/Qml/path_to_qml_binary``. (f, os.path.join(qml_rel_dir, os.path.dirname(os.path.relpath(f, qmldir)))) for f in misc.dlls_in_subdirs(qmldir) ] return binaries, datas
def qt5_qml_plugins_binaries(dir): """Return list of dynamic libraries formatted for mod.binaries.""" binaries = [] qmldir = qt5_qml_dir() files = misc.dlls_in_subdirs(os.path.join(qmldir, dir)) for f in files: relpath = os.path.relpath(f, qmldir) instdir, file = os.path.split(relpath) instdir = os.path.join("qml", instdir) logger.debug("qt5_qml_plugins_binaries installing %s in %s" % (f, instdir) ) binaries.append(( os.path.join(instdir, os.path.basename(f)), f, 'BINARY')) return binaries
def qt5_qml_plugins_binaries(qmldir, directory): """ Return list of dynamic libraries formatted for mod.binaries. """ binaries = [] qt5_qml_plugin_dir = os.path.join(qmldir, directory) files = misc.dlls_in_subdirs(qt5_qml_plugin_dir) for f in files: relpath = os.path.relpath(f, qmldir) instdir, file = os.path.split(relpath) instdir = os.path.join("qml", instdir) logger.debug("qt5_qml_plugins_binaries installing %s in %s", f, instdir) binaries.append((f, instdir)) return binaries
def qt5_qml_plugins_binaries(dir): """Return list of dynamic libraries formatted for mod.pyinstaller_binaries.""" import string binaries = [] qmldir = qt5_qml_dir() dir = string.rstrip(dir, os.sep) files = misc.dlls_in_subdirs(os.path.join(qmldir, dir)) if files is not None: for f in files: relpath = os.path.relpath(f, qmldir) instdir, file = os.path.split(relpath) instdir = os.path.join("qml", instdir) logger.debug("qt5_qml_plugins_binaries installing %s in %s" % (f, instdir)) binaries.append((os.path.join(instdir, os.path.basename(f)), f, "BINARY")) return binaries
def qt5_qml_plugins_binaries(dir): """Return list of dynamic libraries formatted for mod.pyinstaller_binaries.""" import string binaries = [] qmldir = qt5_qml_dir() dir = string.rstrip(dir, os.sep) files = misc.dlls_in_subdirs(os.path.join(qmldir, dir)) if files is not None: for f in files: relpath = os.path.relpath(f, qmldir) instdir, file = os.path.split(relpath) instdir = os.path.join("qml", instdir) logger.debug("qt5_qml_plugins_binaries installing %s in %s" % (f, instdir)) binaries.append((os.path.join(instdir, os.path.basename(f)), f, 'BINARY')) return binaries
import os from PyInstaller.utils import misc from PyInstaller.utils.hooks.qt import pyside2_library_info, add_qt5_dependencies from PyInstaller import log as logging # Only proceed if PySide2 can be imported. if pyside2_library_info.version: logger = logging.getLogger(__name__) hiddenimports, binaries, datas = add_qt5_dependencies(__file__) qmldir = pyside2_library_info.location['Qml2ImportsPath'] # Not all PySide2 installs have QML files. In this case, ``qmldir`` is empty. In # addition, the directory may not exist even if ``qmldir`` is not empty. if not os.path.exists(qmldir): logger.warning('Unable to find Qt5 QML files. QML files not packaged.') else: qml_rel_dir = ['PySide2', 'qml'] datas += [(qmldir, os.path.join(*qml_rel_dir))] binaries += [ # Produce ``/path/to/Qt/Qml/path_to_qml_binary/qml_binary, # PyQt5/Qt/Qml/path_to_qml_binary``. When Python 3.4 goes EOL (see # PEP 448), this is better written as # ``os.path.join(*qml_rel_dir, # os.path.dirname(os.path.relpath(f, qmldir))))``. (f, os.path.join(*(qml_rel_dir + [os.path.dirname(os.path.relpath(f, qmldir))]))) for f in misc.dlls_in_subdirs(qmldir) ]
qmldir = pyqt5_library_info.location['Qml2ImportsPath'] # Per https://github.com/pyinstaller/pyinstaller/pull/3229#issuecomment-359735031, # not all PyQt5 installs have QML files. In this case, ``qmldir`` is empty. if not qmldir: logger.warning('Unable to find Qt5 QML files. QML files not packaged.') else: qml_rel_dir = ['PyQt5', 'Qt', 'qml'] for directory in dirs: # Add base qml directories. this_qml_dir = os.path.join(qmldir, directory) datas += [ # When Python 3.4 goes EOL (see # `PEP 448 <https://www.python.org/dev/peps/pep-0448/>`_, this is # better written as ``os.path.join(*qml_rel_dir, directory)``. (this_qml_dir, os.path.join(*(qml_rel_dir + [directory]))), ] # Add binaries. binaries += [ # Produce ``/path/to/Qt/Qml/path_to_qml_binary/qml_binary, # PyQt5/Qt/Qml/path_to_qml_binary``. When Python 3.4 goes EOL (see # `PEP 448`_, this is better written as # ``os.path.join(*qml_rel_dir, # os.path.dirname(os.path.relpath(f, qmldir))))``. (f, os.path.join(*(qml_rel_dir + [os.path.dirname(os.path.relpath(f, qmldir))]))) for f in misc.dlls_in_subdirs(this_qml_dir) ]
# The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- import os from PyInstaller.utils import misc from PyInstaller.utils.hooks import pyqt5_library_info, add_qt5_dependencies from PyInstaller import log as logging logger = logging.getLogger(__name__) hiddenimports, binaries, datas = add_qt5_dependencies(__file__) qmldir = pyqt5_library_info.location['Qml2ImportsPath'] # Per https://github.com/pyinstaller/pyinstaller/pull/3229#issuecomment-359735031, # not all PyQt5 installs have QML files. In this case, ``qmldir`` is empty. if not qmldir: logger.warning('Unable to find Qt5 QML files. QML files not packaged.') else: qml_rel_dir = ['PyQt5', 'Qt', 'qml'] datas += [(qmldir, os.path.join(*qml_rel_dir))] binaries += [ # Produce ``/path/to/Qt/Qml/path_to_qml_binary/qml_binary, # PyQt5/Qt/Qml/path_to_qml_binary``. When Python 3.4 goes EOL (see # PEP 448), this is better written as # ``os.path.join(*qml_rel_dir, # os.path.dirname(os.path.relpath(f, qmldir))))``. (f, os.path.join(*(qml_rel_dir + [os.path.dirname(os.path.relpath(f, qmldir))]))) for f in misc.dlls_in_subdirs(qmldir) ]