错误:ModuleNotFoundError:没有名为“ email.FeedParser”的模块

时间:2019-06-17 14:50:51

标签: node.js python-2.7 google-app-engine google-apps-script google-sheets

我遇到错误:ModuleNotFoundError:尝试导入以下Python库时,没有名为'email.FeedParser'的模块:

from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools

我正在使用Python 2.7。这些导入在Google API Python脚本内部,当从终端调用时,它们可以正常工作。但是,从nodejs应用程序调用它们会导致出现此错误。

我已按照编号的步骤进行操作: https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#vendoring使用lib文件夹添加库

这解决了googleapiclient最初的问题,但似乎不适用于httplib2库。

对我可能会丢失的东西有什么想法吗?

这是调用脚本的nodejs代码:

app.post('/newProject', (req, res) => {
  //Get date from form

  var nombre = req.body.nombre;

  var PythonShell = require('python-shell');
  var options = {
    args: [nombre], // pass arguments to the script here
  };

  //you can use error handling to see if there are any errors
  ps.PythonShell.run('./createFolder.py', options, function (err, results) {
    if (err) throw err;
    console.log('results: %j', results);
  });
  //your code

  //send result
  res.send(`Full asda is:${nombre}.`)

});

这是完整的错误:

  

错误:ModuleNotFoundError:没有名为“ email.FeedParser”的模块       在PythonShell.parseError(/Users/pol/Documents/sf/lego/legoUI/node_modules/python-shell/index.js:246:21)       在terminalIfNeeded(/Users/pol/Documents/sf/lego/legoUI/node_modules/python-shell/index.js:129:32)       在ChildProcess。 (/用户/pol/Documents/sf/lego/legoUI/node_modules/python-shell/index.js:121:13)       在ChildProcess.emit(events.js:182:13)       在Process.ChildProcess._handle.onexit(内部/child_process.js:240:12)       ----- Python追溯-----       文件“ createFolder.py”,第4行,在         导入createFolderV01       文件“ /Users/pol/Documents/sf/lego/legoUI/createFolderV01.py”,第3行,在         从googleapiclient导入发现       文件“ /Users/pol/Documents/sf/lego/legoUI/lib/googleapiclient/discovery.py”,第52行,在         导入httplib2       文件“ /Users/pol/Documents/sf/lego/legoUI/lib/httplib2/init.py”,第28行,在         导入email.FeedParser

编辑:已解决。事实证明,您可以指定将作为选项参数调用的python解释器nodejs。

2 个答案:

答案 0 :(得分:0)

解决了。问题是节点试图使用Python 3执行脚本,而Google库全部使用python 2.7完成。为了强制它使用Python 2,我添加了

var options = {
        pythonPath: '/usr/bin/python2.7',
        args: [nombre], // pass arguments to the script here
};

执行脚本选项的pythonPath。

答案 1 :(得分:0)

如果从命令行运行时发生此问题。设置CLOUDSDK_PYTHON以使用python2对我有用。

export CLOUDSDK_PYTHON=python2