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

标签 python node.js electron

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

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 中,我执行了 which python,返回了 /usr/bin/python

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

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

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

知道这里会发生什么吗?

非常感谢。

最佳答案

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

关于在 Electron 应用程序中作为子进程运行时,Python 找不到已安装的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367396/

相关文章:

javascript - 在 Node 中异步而不使用 async 模块,有更好的方法吗?

javascript - 在 Electron 应用程序中的 iframe 中加载来自外部站点的本地镜像

html - 使用 Electron 对话框确定文件类型

electron - Electron :process.defaultApp和app.isPackaged之间的区别

python - 使用 groupby 计算 pandas 数据框中的元素并将它们附加到现有数据框中

python - 不确定我的 Python/numpy 版本是否使用优化的 BLAS/LAPACK 库?

python - Pandas :自某个日期以来经过的天数

python - 在 Python 中扩展一个数字 block

javascript - 如何在for循环中顺序调用JavaScript函数?

node.js - 如何确定 T-SQL 查询中的 rowsAffected 数组元素?