Q100398: Nuke 11+에서 PySide Python 스크립트를 사용하여 문제를 해결하는 방법

팔로우

증상

Nuke 11.0v1 이상을 사용하여 Python 스크립트를 시작할 때 스크립트에 Python의 PySide 모듈이 필요한 경우 Nuke 열리지 못하게 하는 예외를 발생시킵니다.

아래에 표시된 것처럼 PySide 모듈을 Nukeinit.py 파일로 가져온 경우 Nuke 실행 시 다음 예외가 발생합니다.
Nuke 의 시작 터미널 내에서 Nuke PySide 모듈(이 경우 PySide.QtCore 을 가져올 수 없음을 지정하는 ImportError 표시됩니다.

원인


Nuke 11.0v1이 출시되면서 라이브러리가 많이 변경되어 Nuke VFX 참조 플랫폼이 호환되었습니다.
PySide의 경우 Nuke 코어 라이브러리 내에서 PySide 1.2.2에서 PySide 2.0으로 업데이트되었으므로 이제 PySide가 아닌 Pyside2로 가져올 수 있습니다. 현재 Nuke 와 함께 제공되는 라이브러리 버전에 대한 자세한 내용은 설명서의 타사 라이브러리 및 글꼴 섹션을 참조하세요.
PySide에서 PySide2로 업데이트한 결과, Nuke 11.0v1부터 PySide 모듈을 더 이상 호출할 수 없습니다.
예를 들어:
import PySide.some_module
다음으로 대체되었습니다:

import PySide2.some_module
또한 일부 클래스의 정의가 모듈 간에 이동되었습니다. 이는 특히 대부분 PySide.QtGui 에서 PySide2.QtWidgets 로 이동된 GUI 관련 클래스에 영향을 주지만, 재배치된 다른 모듈도 있습니다.

해결


Nuke 시작할 때 ImportError 예외를 해결하려면 PySide를 사용하는 '.nuke' 폴더 내의 모든 스크립트를 실행 전에 예외를 포착하도록 변경해야 합니다.
tryexcept 함수를 호출하고 PySide 모듈을 가져올 때 ImportError 포착하도록 import 문을 수정하여 예외 처리를 수행할 수 있습니다.
예외가 발생하면 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 설명서 - 예외 처리

    우리는 문제로 불편을 끼쳐 드려 죄송합니다

    이유를 알려주세요