Q100398: Nuke 11+ में PySide त्रुटियों का समाधान

लक्षण

Nuke 11.0v1 या बाद के संस्करण के साथ पायथन स्क्रिप्ट लॉन्च करते समय, यदि आपकी स्क्रिप्ट को पायथन के PySide मॉड्यूल की आवश्यकता होती है, तो Nuke एक अपवाद फेंक देगा जो इसे खुलने से रोक देगा।

नीचे प्रदर्शित, Nuke लॉन्च पर निम्नलिखित अपवाद तब होता है जब PySide मॉड्यूल Nuke की init.py फ़ाइल में आयात किया जाता है:
Nuke के लॉन्च टर्मिनल के भीतर, एक ImportError दिखाया जाएगा जो यह निर्दिष्ट करेगा कि Nuke PySide मॉड्यूल को आयात नहीं कर सका, इस मामले में, PySide.QtCore :

कारण

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
इसके अतिरिक्त, कुछ क्लासेस की परिभाषा को मॉड्यूल के बीच स्थानांतरित कर दिया गया है। यह विशेष रूप से 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
इससे पुराने PySide कोड PySide2 में चल सकते हैं, क्योंकि ज़्यादातर QtGui फ़ंक्शन QtWidgets मॉड्यूल में स्थानांतरित हो गए हैं। कृपया ध्यान दें : यह कई PySide मॉड्यूल के लिए काम करेगा, लेकिन सभी के लिए नहीं, इसलिए आपको अपने कोड के अन्य हिस्सों को अपडेट करना पड़ सकता है।
यह सुनिश्चित करने के लिए कि PySide मॉड्यूल का उपयोग करने वाली स्क्रिप्ट Nuke 11 और Nuke 12 में सही ढंग से काम करती हैं, आपको संक्रमण को पूरा करना होगा और सभी PySide फ़ंक्शन को PySide2 संस्करणों के रूप में पुनर्संयोजित करना होगा।
यदि आप Nuke 10.5 और Nuke 11 या 12 दोनों में PySide और PySide2 का उपयोग करते समय कोड संगतता चाहते हैं, तो Qt.py प्रोजेक्ट एक प्रक्रिया प्रदान करता है जो आपके Nuke संस्करण के आधार पर PySide और PySide2 मॉड्यूल को स्विच करता है।
नोट : Qt.py परियोजना किसी तीसरे पक्ष द्वारा बनाई गई है, इसलिए किसी भी समस्या या प्रश्न को तीसरे पक्ष के परियोजना मालिकों को सूचित किया जाना चाहिए।

अतिरिक्त पठन

यदि आप अपवादों को संभालने के बारे में अधिक जानना चाहते हैं, तो आप निम्नलिखित लिंक पर अपवादों पर पायथन दस्तावेज़ तक पहुँच सकते हैं: पायथन दस्तावेज़ीकरण - अपवादों को संभालना

Nuke 16+ में PySide त्रुटियों को हल करने के बारे में अधिक जानकारी के लिए, कृपया निम्नलिखित लेख देखें:
Q100715: Nuke 16+ में Python PySide समस्याओं का समाधान कैसे करें

    हम चाहते हैं कि खेद व्यक्त करते हैं

    कृपया हमें बताएँ कि