通过 NodeJs 在我的 Python 脚本中使用 Pymongo

Using Pymongo in my Python script through NodeJs

我正在使用

从我的 NodeJs 服务器代码中“生成”一个 python 脚本
var spawn = require('child_process').spawn;
var python_process = spawn('python', ['server/matcher/matcher.py'])

我的 python 代码应该处理从我的 Mongo 数据库集合中获取的一些数据,因此我需要访问我的数据库。我已经安装了 pymongodnspython 我很确定,因为每当我 运行 安装命令对于他们中的任何一个,我都得到

Requirement already satisfied: dnspython in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (1.16.0)

但是,每当我尝试 运行 我的代码时,我都会收到错误消息

pymongo.errors.ConfigurationError: The "dnspython" module must be installed to use mongodb+srv:// URIs

我像往常一样访问我的数据库,并按照文档中的说明进行操作

from pymongo import MongoClient
client = MongoClient(<connection string>)
    db = client.<db name>
    users = db.users.find({})

我意识到这是一个环境问题,因为当我在 PyCharm 中 运行 时,相同的代码 运行 正确并成功连接到 Mongo,但我不确定如何让它在 NodeJs 子进程中工作。

尝试 运行:

sudo pip install --upgrade pip` or `python -m pip install --upgrade pip

在你的命令行中。

然后再次尝试安装 dnspython

所以正如日志消息所报告的那样,确实安装了所需的模块,但是它们被安装到 Python3.7 和 Python 3.9 的目录中(我 运行 我的代码在 PyCharm 上,它使用 python3.7 作为解释器,解释它们在其目录中,我使用 'pip3' 安装模块,这解释了它们在 python3 中。 9目录(我认为))

只需要将'python'改成'python3.7'就可以解决问题,所以代码就变成了

var spawn = require('child_process').spawn;

如果您遇到同样的问题,请首先确保检查模块的安装位置,然后确保您的脚本 运行 使用相同版本的 python。

如果您想更详细地了解该过程,请查看评论。