ошибка импорта установленных пакетов Python в pyshell nodejs - PullRequest
2 голосов
/ 08 апреля 2019

Я установил пакет, используя pip на моем сервере Ubuntu 18.04.

Когда я захожу в терминал и набираю следующее, все работает нормально:

$ python
>>> import <package-name>

Явозможность использовать функции пакета и т. д.

Но когда я делаю это с помощью утилиты const PythonShell = require('python-shell'); в Node.Js, я получаю ModuleNotFoundError: No module named '<package-name>' (код import <package-name> - единственная вещь в файле Python, который яя использую оболочку python в node.js)

Чем можно объяснить эту разницу в обработке?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы получаете ModuleNotFoundError, потому что у вас не установлен модуль python-shell. У вас правильно установлен Python. Предполагая, что у вас также правильно установлен узел / npm, вы можете запустить следующее для установки модуля узла python-shell:

  • npm install python-shell

После этого ваш модуль будет разрешен. Обратите внимание, что пакет python-shell из pip предназначен для использования в python, но его нельзя использовать в скрипте узла. Чтобы использовать внутри сценария узла, вам нужен модуль узла python-shell. Это две разные вещи. Пакеты pip нельзя использовать внутри node, а пакеты npm нельзя использовать внутри python.

0 голосов
/ 08 апреля 2019

В случае, если кто-то еще увязнет в этих глупых проблемах с путями, вот настоящая проблема и мое решение.

Проблема в том, что некоторые пакеты python были установлены через pip, а другие через apt-getpython-shell не загружает pip.

В моем конкретном примере я пытался загрузить пакет, который на моей машине находится в

/home/ubuntu/.local/lib/python2.7/site-packages/ -> pip install
/home/ubuntu/.local/lib/python3.6/site-packages/ -> pip install
/usr/lib/python2.7/dist-packages/ -> apt-get install

Дляпо какой-то причине python-shell может импортировать библиотеку только из пути /usr/lib.

Решение состоит в том, чтобы либо

  1. Скопировать папку библиотеки из своего site-packages в /usr/lib/ путь
  2. Вставьте следующее в верхней части кода, чтобы при необходимости можно было обновить пакет, используя pip

    import sys
    sys.path.insert(0, "/the/site-packages/path/you/want")
    
...