Python 中的条件模块导入

Conditional module importing in Python

我刚刚试用 Maya 2017,发现它们已经转向 PySide2,这很棒,但我所有的工具都包含 import PySidefrom PySide import ... .

明显的解决方案是 find/replace import PySideimport PySide2 并希望在那之后一切仍然有效,但我仍然希望能够支持旧版本的 Maya .

我的想法是对 find/replace 进行单行解决,例如:

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

但是这个 returns: Error: invalid syntax

有人对此有替代方案吗?我想尝试将它保持在一行中,以便在我遇到以下情况时轻松替换它:

from PySide import QtCore, QtGui

谢谢!

您可以排除 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')

@user312016 的答案在 "import" 情况下效果很好,但在 "from 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']