Python 中的条件模块导入
Conditional module importing in Python
我刚刚试用 Maya 2017,发现它们已经转向 PySide2
,这很棒,但我所有的工具都包含 import PySide
或 from PySide import ...
.
明显的解决方案是 find/replace import PySide
到 import 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']
我刚刚试用 Maya 2017,发现它们已经转向 PySide2
,这很棒,但我所有的工具都包含 import PySide
或 from PySide import ...
.
明显的解决方案是 find/replace import PySide
到 import 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']