증상
Nuke 11.0v1 이상에서 Python 스크립트를 실행할 때 스크립트에 Python의 PySide 모듈이 필요한 경우 Nuke 에서 예외가 발생하여 스크립트가 열리지 않습니다.
아래에 표시된 대로, Nuke 의
init.py 파일에 PySide 모듈이 가져온 경우 Nuke 실행 시 다음 예외가 발생합니다. Nuke 의 시작 터미널 내에서 Nuke PySide 모듈(이 경우
PySide.QtCore )을 가져올 수 없다는 것을 나타내는 ImportError 표시됩니다. 원인
PySide의 경우 Nuke 코어 라이브러리 내에서 PySide 1.2.2에서 PySide 2.0으로 업데이트되었으므로 이제 PySide가 아닌 Pyside2로 가져올 수 있습니다. 현재 Nuke 와 함께 제공되는 라이브러리 버전에 대한 자세한 내용은 설명서의 "타사 라이브러리 및 글꼴" 섹션을 참조하십시오.
Nuke 11.0v1부터 PySide에서 PySide2로 업데이트되면서 PySide 모듈을 더 이상 호출할 수 없습니다.
예를 들어:
import PySide.some_module
다음으로 대체되었습니다:
import PySide2.some_module
또한, 일부 클래스의 정의가 모듈 간에 이동되었습니다. 이는 특히 GUI 관련 클래스에 영향을 미치는데, 대부분
PySide.QtGui 에서 PySide2.QtWidgets 로 이동되었지만, 다른 모듈도 재배치되었습니다.해결
Nuke 시작할 때
ImportError 예외를 해결하려면 '.nuke' 폴더 내에 있는 PySide를 사용하는 모든 스크립트를 변경하여 실행 전에 예외를 포착해야 합니다. 예외를 처리하려면 import 문을 수정하여
try 및 except 함수를 호출하고 PySide 모듈을 가져올 때 ImportError 포착하면 됩니다. 예외가 발생하면 PySide2와 동등한 함수를 가져오기 위한 호출을 추가할 수 있으며, 이를 통해 시작 시
ImportError 오류가 발생하는 것을 방지할 수 있습니다.추가 정보
원인 섹션에서 언급했듯이 일부 GUI 관련 기능이 다른 모듈로 이동되었습니다. 모든 GUI 관련 작업에 사용되는 PySide 모듈인
PySide.QtGui 는 대부분 PySide2.QtWidgets 모듈로 이동되었습니다. 이 모듈을 사용할 때 대부분 Nuke 내에서
ImportError 방지하고 스크립트에서 각 Pyside.QtGui 함수를 리팩토링하는 대신 PySide2.QtWidgets QtGui 로 가져와야 합니다. 다음 코드 조각과 같이 설정할 수 있습니다.
try:
from PySide import QtGui, QtCore
except ImportError:
from PySide2 import QtCore
from PySide2 import QtWidgets as QtGui
대부분의 QtGui 함수가 QtWidgets 모듈로 이전되었으므로, 이전 PySide 코드를 PySide2에서 실행할 수 있습니다. 참고 : 이 기능은 많은 PySide 모듈에서 작동하지만 모든 모듈에서 작동하는 것은 아니므로 코드의 다른 부분을 업데이트해야 할 수도 있습니다.
PySide 모듈을 사용하는 스크립트가 Nuke 11 및 Nuke 12에서 올바르게 작동하는지 확인하려면 전환을 완료해야 하며 모든
PySide 기능을 PySide2 버전으로 리팩토링해야 합니다. Nuke 10.5와 Nuke 11 또는 12에서 PySide와 PySide2를 사용할 때 코드 호환성을 유지하고 싶다면, Qt.py 프로젝트에서는 Nuke 버전에 따라 PySide와 PySide2 모듈을 전환하는 프로세스를 제공합니다.
참고 : Qt.py 프로젝트는 제3자에 의해 만들어졌으므로 문제나 질문이 있는 경우 제3자 프로젝트 소유자에게 보고해야 합니다.
추가 읽기
예외 처리에 대해 자세히 알고 싶으시다면 다음 링크에서 Python 예외 설명서를 확인하실 수 있습니다. Python 설명서 - 예외 처리
Nuke 16+에서 PySide 오류를 해결하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.
Q100715: Nuke 16+에서 Python PySide 문제를 해결하는 방법
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요