2017-08-22 9 views
2

私はここで何か不適切なことをしているように見えますが、私はそれが何であるかには唖然としています。私はMayaの中からThe Foundry NUKEを立ち上げようとしています。試してみると、見つからないモジュールに関するこのエラーが出ます。しかし、定期的なコマンドラインでNukeをロードすると、完全にうまくロードされます。 MayaのPythonインタプリタに関連する何かがこのモジュールを見つけることができないと思われますか?私はそれを見つけることができないようです...Maya内でNukeを起動するにはどうすればよいですか?

更新#1:私はさらに、ヌークプラグイン、DLL、libのいくつかのsys.path.appendsを実行しようとしています。 ..

更新#2:私はPythonを再インストールし、64ビットであることを確認しました。また、64ビットのMayaとNukeのバージョンも確認しました。私は次のようにも試しました... os.system呼び出しでNukeをロードするために、Maya以外の通常のPythonコマンドプロンプトを開き、それが動作します。この_socketモジュールをインポートする際に問題が発生して失敗するのは、MayaのNukeのos.system呼び出しを行うときだけです。 Mayaがロードされたモジュール_socket何チェックするときに私が取得:MayaのPythonはこの_socketの差分バージョンをロードしていることを信じて私をリードする

import _socket 
print _socket.__file__ 
C:\Program Files\Autodesk\Maya2016\Python\DLLs\_socket.pyd 

その後、ハァハァであり、何かが間違ってそこに何が起こっていますか。

オリジナルコード/エラー:

C:\Program Files\Nuke9.0v8\Nuke9.0.exe 
Traceback (most recent call last): 
    File "C:/Program Files/Nuke9.0v8/plugins/init.py", line 22, in <module> 
     import nukescripts.ViewerProcess 
    File "C:/Program Files/Nuke9.0v8/plugins\nukescripts\__init__.py", line 22, in <module> 
     from nukeprofiler import * 
    File "C:/Program Files/Nuke9.0v8/plugins\nukescripts\nukeprofiler.py", line 2, in <module> 
     import socket 
    File "C:\Python27\lib\socket.py", line 47, in <module> 
     import _socket 
ImportError: DLL load failed: The specified module could not be found. 
C:/Program Files/Nuke9.0v8/plugins/init.py : error interpreting this plugin 

from PySide import QtCore, QtGui 
import maya.cmds as cmds 
import os, sys 
#import subprocess 


class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(314, 216) 
     sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred) 
     sizePolicy.setHorizontalStretch(0) 
     sizePolicy.setVerticalStretch(0) 
     sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth()) 
     Dialog.setSizePolicy(sizePolicy) 
     self.blastBtn = QtGui.QPushButton(Dialog) 
     self.blastBtn.setGeometry(QtCore.QRect(110, 130, 75, 23)) 
     self.blastBtn.setObjectName("blastBtn") 

     self.blastBtn.clicked.connect(self.RunPlayblast) 

     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Playblast & Nuke Me", None, QtGui.QApplication.UnicodeUTF8)) 
     self.blastBtn.setText(QtGui.QApplication.translate("Dialog", "Blast", None, QtGui.QApplication.UnicodeUTF8)) 


    def RunPlayblast(self): 
     cmds.playblast(fmt="qt", f="myMovie.mov", fo=True) 
     self.RunNuke() 

    def RunNuke(self): 
     nukeExe = r'C:\Program Files\Nuke9.0v8\Nuke9.0.exe' 
     myTemplate = r'B:\home\nukePBTemplate.nk' 

     os.system('"'+nukeExe+'" -x ' +myTemplate) 

     #command = nukeExe+" -x "+myTemplate 
     #subprocess.Popen(command) 

if __name__ == '__main__': 
    app = QtGui.QApplication.instance() 
    Dialog = QtGui.QDialog() 
    blastMe = Ui_Dialog() 
    blastMe.setupUi(Dialog) 
    Dialog.show() 
    app.exec_() 
+0

DLLのエラーが原因の一つを思い出させる:あなたは、Pythonの異なるビットバージョンのハァハァをインストールしている場合があります。 64ビットのPythonモジュールは64ビットのPython用に構築され、32ビットのPythonモジュールは32ビットのPython用です。正しいバージョンをアンインストールして再インストールすることで、エンディアンの不一致を排除することを検討してください。 –

+0

ありがとうございます。これが犯人かどうか今私は疑問に思っています。私はそれを調べなければならないでしょう...それが不満なモジュールがパスに追加されているとして、それはまだ不平を言います。 – Zak44

答えて

2

私はあなたがこの

import subprocess 
nukeProcess = subprocess.Popen(["C:/Program Files/Nuke9.0v8/Nuke9.0.exe", "-x", "B:/home/nukePBTemplate.nk"]) 

のように核兵器を呼び出すためにサブプロセスに建設され、私はあなたのpythonからしようとしているのであなたはすでにPythonがあり、(「システム/何でも」)mel.evalを使用することはありませんだと思う使用することができると思いますサブプロセスやコマンドなどのシステムコマンドを扱う多くのメソッドを組み込んでいます。

更新

import subprocess, os 
newEnv = os.environ.copy() 
newEnv["PYTHONPATH"] = newEnv["PATH"] + "/local/share/python/2.7/libs" 
nukeProcess = subprocess.Popen(["C:/Program Files/Nuke9.0v8/Nke9.0.exe", "-x", "B:/home/nukePBTemplate.nk"], env=newEnv) 
+0

これが試みられました。これは_socketモジュールに関する上記のエラーを回避しません。しかし、ありがとう。 – Zak44

+0

Mayaには独自のpythonパスがあります。おそらく、実際にはpythonlibsが酷いです。私は、Windowsマシンにアクセスする必要はありませんが、私のLinuxボックスでは正常に動作します。例 – Achayan

+0

で更新された回答これは動作しません。 /local/share/python/2.7/libsのパスをC:/ Python27/libsのパスに変更しましたが、上記と同じエラーが表示されます。 – Zak44

0

あなたはPythonスクリプト内system MELコマンドを実行する必要があります。これを行うには、文字列引数(文字列内の文字列)を使用してmel.evalメソッドを使用する必要があります。 evalコマンドの目的は、ユーザが実行時にのみ決定できるMELコマンドまたはプロシージャを実行する方法を提供することです。

import maya.mel as mel 

def RunNuke(self): 
    mel.eval('system "/Applications/Nuke10.5v5/Nuke10.5v5.app/Contents/MacOS/Nuke10.5v5 --nc --nukex"') 

私はMacOSの(Windowsではなく)上NUKEXの非商用版を実行していることだし、それが動作します。あなたのコードの

フルバージョンは、次のようになります

from PySide import QtCore, QtGui 
import maya.cmds as cmds 
import os, sys 
import maya.mel as mel 

class Ui_Dialog(object): 

    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(314, 216) 
     sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred) 
     sizePolicy.setHorizontalStretch(0) 
     sizePolicy.setVerticalStretch(0) 
     sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth()) 
     Dialog.setSizePolicy(sizePolicy) 
     self.blastBtn = QtGui.QPushButton(Dialog) 
     self.blastBtn.setGeometry(QtCore.QRect(110, 130, 75, 23)) 
     self.blastBtn.setObjectName("blastBtn") 
     self.blastBtn.clicked.connect(self.RunPlayblast) 
     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Playblast & Nuke Me", None, QtGui.QApplication.UnicodeUTF8)) 
     self.blastBtn.setText(QtGui.QApplication.translate("Dialog", "Blast", None, QtGui.QApplication.UnicodeUTF8)) 

    def RunPlayblast(self): 
     cmds.playblast(fmt="qt", f="myMovie.mov", fo=True) 
     self.RunNuke() 

    def RunNuke(self): 
     mel.eval('system "/Applications/Nuke10.5v5/Nuke10.5v5.app/Contents/MacOS/Nuke10.5v5 --nc --nukex "') 

if __name__ == '__main__': 
    app = QtGui.QApplication.instance() 
    Dialog = QtGui.QDialog() 
    blastMe = Ui_Dialog() 
    blastMe.setupUi(Dialog) 
    Dialog.show() 
    app.exec_() 

enter image description here

あなたはまだマヤの中からNUKEの起動で問題が発生した場合は、safe modeでそれを実行しよう:

import maya.mel as mel 

def RunNuke(self): 
    mel.eval('system "C:\Program Files\Nuke9.0v8\Nuke9.0.exe" --safe --nc --nukex') 

Read it: Launching NUKE and HIERO in safe mode .

それでも動作しないのであれば、Pythonライブラリのバグか、init.pyの内容に問題があると思います。

+0

ありがとうございますが、これは動作しません。単純化するために...私はMayaのスクリプトエディタに入り、MELに次のようにタイプしました。 システム "C:/PROGRA~1/Nuke9.0v8/Nuke9.0.exe --nukex" 私はまだ同じエラーが出ます: C:/PROGRA~1/Nuke9.0v8/plugins/init.py:このプラグインを解釈する際にエラーが発生しました。 これは、MayaのPythonが上記のモジュールを見つけられないことに関連していると思います。上記のようにコマンドラインでNukeを実行すると、完璧に動作します。 – Zak44

+0

init.pyを他の場所に移動してもう一度試してみてください...問題があると思います。 – andy

+0

と '__init __。py'、そしてnukeprofiler.py – andy

関連する問題