我在我的Ubuntu 18.04服务器上使用pip
安装了一个软件包。
当我进入终端并键入以下内容时,一切正常:
$ python
>>> import <package-name>
我可以使用包功能等。
但是,当我通过const PythonShell = require('python-shell');
中的Node.Js
实用程序执行此操作时,我得到ModuleNotFoundError: No module named '<package-name>'
(import <package-name>
代码是python文件中唯一使用node.js中的python shell运行的代码)
什么可以解释治疗的差异?
您正在获取ModuleNotFoundError
,因为您没有安装python-shell
节点模块。你正确安装了python。假设您也正确安装了node / npm,您可以运行以下命令来安装python-shell
节点模块:
npm install python-shell
通过这样做,您的模块现在将解决。请注意,python-shell
中的pip
包用于python
,但不能在节点脚本中使用。要在节点脚本内部使用,您需要python-shell
节点模块。他们是两件不同的事。 pip
包不能在node
内使用,而npm
包不能在python
内使用。
如果其他人陷入这些愚蠢的路径问题,这是实际的问题和我的解决方案。
问题是一些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")