2017-01-04 5 views
2

node.jschild_process.spawnを電子アプリケーション(node.js)経由でPythonスクリプトを実行するために使用します。私はそこには問題はありませんが、、node.jsを使用して、端末(MacOSの)上のPythonスクリプトを実行する場合:Node.js child_processエラーの原因となるPythonスクリプトの実行

const spawn = require('child_process').spawn 
let ls = spawn('python', ['runserver.py','--help'], { 
    cwd: __dirname, 
    detached: true 
}) 

私は失敗したモジュールの輸入のpythonからエラーが出る、といった:

Traceback (most recent call last): 
    File "runserver.py", line 17, in <module> 
    from queue import Queue 
ImportError: No module named queue 

Iすでに運がない別の環境を設定しようとしました。

編集:ここでは

sys.pathのログです:

  • コードの実行からは、端子を介してコードの実行からchild_process

    [ 
        '/Users/xAlien95/Desktop/test.app/Contents/Resources/app', 
        '/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
        '/Library/Python/2.7/site-packages', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', 
        '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC' 
    ] 
    
  • 経由

    [ 
        '/Users/xAlien95/Desktop/test.app/Contents/Resources/app', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
        '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
        '/usr/local/lib/python2.7/site-packages', 
        '/usr/local/Cellar/protobuf/3.1.0/libexec/lib/python2.7/site-packages' 
    ] 
    

端末では、homebrewのダウンロード済みのPythonフレームワークを使用しています。 node.jsアプリで同じことをどうすれば確実にすることができますか?

+0

pythonスクリプトprint/log sys.pathを持っています。 Pythonのインストールが存在することを確認してください。 http://stackoverflow.com/questions/897792/where-is-pythons-sys-path-initialized-from –

+0

@StephenRauch、あなたの提案のおかげで、私は質問を編集しました。 nodejsにその環境を簡単に設定する方法はありますか? – xAlien95

答えて

1

Pythonが異なるライブラリを見つける方法の1つは、環境変数PYTHONPATHを使用することです。

let ls = spawn(process.env.HOMEBREW_PREFIX + '/bin/python', ['runserver.py','--help'], { 
    ... 
:あなたは homebrewインストールのpythonを実行したいの特定の場合について process.env.PYTHONPATH

DOCS)(SOURCE

を使ってNode.jsの中でこれを設定することができ、Pythonの実行ファイルはで利用可能であるべきです

HOMEBREW_PREFIX場合process.envで利用できず、所望のPythonへのパスが知られ、それはスポーンにハードコーディングすることができる。

let ls = spawn(/*<Where my python lives>*/ + '/bin/python', ['runserver.py','--help'], { 
    ... 
+0

残念ながら、 'process.env'オブジェクトに' PYTHONPATH'や 'HOMEBREW_PREFIX'はありません。しかし、 ''/usr/local/Cellar/python/2.7.13/bin/python ''を実行すると動作します。 "process.env.HOMEBREW_PREFIXが利用できない場合は、完全な文字列パスを前に置いてください"という答えを編集するだけで、答えとしてマークします。ありがとうございました! – xAlien95

+0

私の場合も、PYTHONPATHやHOMEBREW_PREFIXはなく、絶対パスであっても同じ問題があります。 私は正しい経路を持っているかどうかはわかりません。時々私は得た:ENOTDIRエラーを生み出す! @ xAlien95助けてください – AsmaG

関連する問題