0

次のコードを使用して Python プログラムをサブプロセスとして開始しようとしていますが、サブプロセスは ImportErrors を stderr に出力します。

コード

import subprocess
import sys
import os

environment = os.environ

command = ["python", "-u", "/test/my_python_program.py"]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=environment)

for line in iter(p.stdout.readline, ''):
    line = line.replace('\r', '').replace('\n', '')
    print line
    sys.stdout.flush()

エラー

Traceback (most recent call last):
  File "/test/my_python_program.py", line 31, in <module>
    from PySide import QtGui, QtCore, QtNetwork
ImportError: dlopen(/Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages/PySide/QtGui.so, 2): Library not loaded: @executable_path/libpyside-python2.7.1.1.dylib
  Referenced from: /Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages/PySide/QtGui.so
  Reason: image not found

別のプログラム (Autodesk Maya) に埋め込まれた Python のバージョンからコードを実行しています。ImportError の原因となるモジュールは、メイン プロセスの Python インタープリターからインポートできます。私の仮定は、メインプロセスのpythonのenvをサブプロセスに提供して、メインのpythonインスタンスもアクセスできるモジュールにアクセスできるようにすることでした。

アプローチは理にかなっていますか?もしそうなら、私は何を間違っていますか?

編集1

また、呼び出しで使用される組み込みバージョンの python を使用しようとしましたがpopen、エラーが残りました。インポートを削除すると、Python の組み込みバージョンは問題なく動作します。

編集 2

これらは、os.environ返す環境変数です

MAYA_MODULE_PATH
AUTOLOADER_LAPS
LOGNAME
USER
SUBSTANCES_LOCATION
PATH
HOME
MAYA_SCRIPT_BASE
MENTALRAY_INCLUDE_LOCATION
SHELL
MAYA_LICENSE_METHOD
MAYA_LICENSE
QT_MAC_NO_NATIVE_MENUBAR
MAYA_SCRIPT_PATH
MAYA_REVERSE_FILEFORMAT_EXT
WF_IMF_CIN_WHITE_POINT
MAYA_LOCATION
PYTHONPATH
SSH_AUTH_SOCK
MENTALRAY_SHADERS_LOCATION
Apple_PubSub_Socket_Render
MAYA_PRESET_PATH
XBMLANGPATH
MAYA_RENDER_DESC_PATH
MAYA_SHADER_LIBRARY_PATH
MENTALRAY_LOCATION
TMPDIR
__KMP_REGISTERED_LIB_5123
MAYA_PLUG_IN_PATH
MAYA_APP_DIR
PYTHONHOME
MAYA_PLUG_IN_RESOURCE_PATH
__CF_USER_TEXT_ENCODING
IMF_PLUG_IN_PATH
__CHECKFIX1436934
WF_IMF_CIN_CORRECTION

編集 3

の内容はこちらPYHOME

/Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current
4

1 に答える 1

1

Maya 内で実行されている Python は完全に標準ではありません...

Maya 内から実行する場合、mayapyコマンドを使用してPython を起動する必要がある場合があります。これにより、Autodesk の要件に従って Python がブートストラップされ、Python の実行に必要な環境が正しいことが保証されます。(ただし、これは Edit1 で言及しているものである可能性があります)。

popenまた、コマンドに環境を渡さないようにしましたか? のデフォルトの動作はpopen、必要な現在のプロセスの環境を継承することだと思います。DYLD_LIBRARY_PATH環境が設定されていること、および/またはDYLD_FRAMEWORK_PATHある時点でQtがどこにあるかを伝えることを期待しています。

于 2014-01-24T02:07:24.940 に答える