在Electron应用程序中作为子进程运行时,Python将找不到已安装的模块

时间:2016-02-12 16:21:57

标签: python node.js electron

我在使用 child_process 模块在Electron中运行python脚本时遇到了一些麻烦。 我最近在我的计算机上安装了Anaconda(OSX 10.11.2)并创建了这个脚本:

import pandas as pd
from pandasql import sqldf

# read dataset file
filename = "/path/to/my/dataset.csv"
df = pd.read_csv(filename, sep=',', error_bad_lines=False)

# esecute SQL-like query
q = '''
SELECT * FROM df
'''
syr_subset = sqldf(q, globals())

# print result
print syr_subset.to_json()

如果我使用 python myscript.py 在终端中运行此脚本,一切正常(脚本使用pandas加载csv文件,执行查询并返回结果)。

但是,如果我尝试在Electron中运行相同的脚本,就像这样:

var exec = require('child_process').exec;
var child = exec('python -u /path/to/myscript.py',
  function(error, stdout, stderr) {
    console.log('stdout: ', stdout);
    console.log('stderr: ', stderr);
    if (error !== null) {
      console.log('exec error: ', error);
    }
});

我收到错误。

stderr包含这个:

stderr:  Traceback (most recent call last):
  File "/path/to/myscript.py", line 1, in <module>
    import pandas as pd
ImportError: No module named pandas

捕获的错误包含:

cmd: "/bin/sh -c python -u /path/to/myscript.py"
message: 
Command failed: /bin/sh -c python -u /path/to/myscript.py
Traceback (most recent call last):
  File "/path/to/myscript.py", line 1, in <module>
      import pandas as pd
      ImportError: No module named pandas 

所以看起来这个脚本在Electron中运行时找不到pandas库(让我再说一遍,在终端运行时不会发生这种情况,一切都很好)。据我所知,我没有使用virtualenv。

再次在Electron中,我执行哪个python ,返回 / usr / bin / python

如果我在终端中执行哪个python ,它会返回 / Users / myusername / anaconda2 / bin / python

我不太明白为什么Electron似乎运行的二进制文件不同于我在终端中运行的默认二进制文件。

最后,为了更容易地测试这个,因为真正的代码嵌入在一个更大的Electron应用程序中,我创建了一个新的Electron项目并运行完全相同的代码(我粘贴在上面的代码片段)。令人惊讶的是,一切都很好。所以,两个不同的Electron应用程序,但显然运行相同的代码:在一种情况下它不起作用(似乎运行不同的python二进制文件),而在另一种情况下它工作。

知道会发生什么事吗?

非常感谢。

1 个答案:

答案 0 :(得分:3)

我终于通过删除我的Anaconda安装并使用pip重新安装python模块来解决它。不确定是什么导致了这个问题,但这个解决方案现在足以满足我的需求。