Я упаковываю приложение python с помощью «pyinstaller --onefile myapp.py», который создает один исполняемый файл, и приложение прекрасно работает.Теперь я хотел бы иметь возможность импортировать модуль из системы, если он существует, и в противном случае использовать связанный модуль из одного исполняемого файла.Я специально хочу импортировать PySide2 из системы, если она установлена, и в идеале с настраиваемым флагом, который указывает, должно ли приложение загружаться из системы или из одного исполняемого файла.Я уже использую файл конфигурации, который читается одним исполняемым файлом, поэтому я мог бы поставить там флаг, чтобы указать, как загрузить модуль.Есть ли способ сделать это?
Псевдокод будет выглядеть примерно так:
read import_external from configuration file
if import_external is true:
try:
import PySide2 from system
except:
import PySide2 from executable
РЕДАКТИРОВАТЬ Я близок к решению.Я могу импортировать один файл Python динамически из исполняемого файла pyinstaller onefile, как в приведенном ниже коде, где я создал фиктивный файл "PySide2.py" с простым оператором печати для проверки его импортированности.
import os
print("Import test")
if os.path.isfile('./PySide2.py'):
print('Importing local PySide2')
import importlib
import importlib.util
spec = importlib.util.spec_from_file_location('PySide2', './PySide2.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
else:
print('Importing system PySide2')
import PySide2
print(PySide2.__version__)
print("Import complete")
НоPySide2 - это не один файл, поэтому теперь мне нужно понять, как импортировать из каталога.Любой совет приветствуется!
РЕДАКТИРОВАТЬ 2 Я нашел решение здесь: Python использует importlib для импорта модуля из каталога пакетов