Ошибка: ModuleNotFoundError: нет модуля с именем 'email.FeedParser' - PullRequest
0 голосов
/ 17 июня 2019

Я получаю сообщение об ошибке: ModuleNotFoundError: Нет модуля с именем 'email.FeedParser' при попытке импортировать следующие библиотеки Python:

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) в terminateIfNeeded (/Users/pol/Documents/sf/lego/legoUI/node_modules/python-shell/index.js:129:32) в ChildProcess.(/Users/pol/Documents/sf/lego/legoUI/node_modules/python-shell/index.js:121:13) в ChildProcess.emit (events.js: 182: 13) в Process.ChildProcess._handle.onexit (internal / 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 /Документы / sf / lego / legoUI / lib / httplib2 / init .py ", строка 28, в электронном письме об импорте. FeedParser

Редактировать: Решено.Оказывается, вы можете указать, какой интерпретатор Python nodejs будет вызывать в качестве параметра option.

1 Ответ

0 голосов
/ 26 июня 2019

Решил это. Проблема заключалась в том, что узел пытался выполнить сценарий с использованием Python 3, а библиотеки Google - с использованием Python 2.7. Чтобы заставить его использовать Python 2, я добавил

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

путь pythonPath к параметрам выполнения скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...