2016-12-05 12 views
-1

Я просто пробовал Maya 2017 и видел, что они перешли на PySide2, и это здорово, но все мои инструменты имеют import PySide или from PySide import ....Импорт условного модуля в Python

Очевидным решением было бы найти/заменить import PySide на import PySide2 и надеяться, что после этого все будет работать, но я все равно хочу поддерживать более старые версии Maya.

Моя идея состояла в том, чтобы иметь единственное решение строки поиска/замены, как:

import (PySide2 if "PySide2" in sys.modules else PySide) 

Но это возвращает: Error: invalid syntax

Кто-нибудь есть какие-либо идеи альтернативы этому? Я хотел бы попробовать и держать его на одной линии, так что это легкая замена, когда я получил условия, как:

from PySide import QtCore, QtGui 

Спасибо!

ответ

6

Вы можете за исключение ImportError исключения:

try: 
    from Pyside2 import QtCore, QtGui 

except ImportError: 
    from PySide import QtCore, QtGui 

В качестве альтернативы, вы можете использовать importlib модуль:

import importlib 
import sys 

PySide = importlib.import_module('Pyside2' if 'Pyside2' in sys.modules else 'PySide') 
+0

Спасибо! Это хорошо, если я поставил это на вершине всех моих сценариев, он должен работать красиво :) – Nodgers

+0

@Nodgers Добро пожаловать – user312016

-1

@ ответ user312016 работал хорошо для "импортной" ситуации, но менее хорошо «от PySide import ... ". Я закончил тем, что добавил к моему сценарию запуска, который тщательно перефразировал все.

import sys 
sys.modules['PySide'] = sys.modules['PySide2'] if 'PySide2' in sys.modules else sys.modules['PySide'] 
sys.modules['shiboken'] = sys.modules['shiboken2'] if 'shiboken2' in sys.modules else sys.modules['shiboken'] 
+0

Ой, и теперь я понял, что даже это не идеально, потому что библиотеки переместили вещи вокруг в PySide2: D – Nodgers

 Смежные вопросы

  • Нет связанных вопросов^_^