Я установил пакет с помощью 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)
Чем можно объяснить такое различие в обращении?
Вы получаете ModuleNotFoundError
, потому что у вас не установлен модуль узла python-shell
. У вас правильно установлен питон. Предполагая, что у вас правильно установлен node/npm, вы можете запустить следующее, чтобы установить модуль узла python-shell
:
npm install python-shell
Таким образом, ваш модуль теперь будет разрешен. Обратите внимание, что пакет python-shell
из pip
предназначен для использования в python
, но его нельзя использовать в сценарии узла. Для использования внутри скрипта узла вам понадобится модуль узла python-shell
. Это две разные вещи. Пакеты pip
нельзя использовать внутри node
, а пакеты npm
нельзя использовать внутри python
.
python-shell находится в моем package.json и т. д.
На случай, если кто-то еще увязнет в этих глупых проблемах с путями, вот реальная проблема и мое решение.
Проблема в том, что некоторые пакеты Python были установлены через pip
, а другие через apt-get
, а python-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
.
Решение либо
site-packages
пути /usr/lib/
Вставьте следующее в начало кода, чтобы при необходимости можно было обновить пакет через pip
import sys
sys.path.insert(0, "/the/site-packages/path/you/want")
Мой вопрос может быть неясен. Когда я запускаю скрипт
import <package-name>
через python-shell, я получаю сообщение об ошибке. Сама оболочка работает нормально постольку, поскольку запускает скрипт.