【问题标题】:Activating an virtual environment from python in nodejs在nodejs中从python激活虚拟环境
【发布时间】:2019-09-10 17:06:00
【问题描述】:

我在树莓派 4 上有以下项目: 我在 python 中创建了一个需要虚拟环境才能运行的人脸识别脚本。 脚本打印出被检测到的人。

在 NodeJS 中,我想通过在节点中运行脚本来获得答案(缩小版):

const http = require("http");
const server = http.createServer((req, res) => {

var spawn = require('child_process').spawn,
py    = spawn('python', ['faceReg.py'],)
py.stdout.on('data', function(data){
  console.log('Data:' + data);

});
py.stdout.on('end', function(){
  console.log('Python ended');


 });

});

执行代码时,我立即得到“python 结束”。

在我的 pi 上,当我在执行前运行以下命令时,我可以运行脚本:

source ~/.virtualenvs/cv2_env/bin/activate 

python脚本基本是:

stop = False
while(stop==False):
   print("Peter")

更新

运行时

py    = spawn('~/.virtualenvs/cv2_env/bin/python', ['faceReg.py'])

我收到以下错误:

events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: spawn ~/.virtualenvs/cv2_env/bin/python ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:757:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Emitted 'error' event at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:246:12)
    at onErrorNT (internal/child_process.js:415:16)
    [... lines matching original stack trace ...]
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

这是我的文件系统:

我做错了什么?

【问题讨论】:

    标签: python node.js raspberry-pi virtual-environment


    【解决方案1】:

    必须在脚本本身中激活虚拟环境。超出此范围将不会生效。

    类似于答案here,您只需要执行虚拟环境中列出的 Python 运行时。该问题引用了pip,但您基本上可以将其替换为您想要的 Python 版本(存在于您的虚拟环境中)。换句话说,您将替换这一行:

    py    = spawn('python', ['faceReg.py'],)
    

    用这一行:

    py    = spawn('/home/youruser/.virtualenvs/cv2_env/bin/python', ['faceReg.py'],)
    

    注意:如果失败,您可能需要将 /home/youruser/.virtualenvs/cv2_env/bin/python 更改为您正在寻找的任何 Python 版本,例如/home/youruser/.virtualenvs/cv2_env/bin/python3 或 /home/youruser/.virtualenvs/cv2_env/bin/python3.7。

    【讨论】:

    • 我更新了我的问题。我收到找不到目录的错误
    • @J.Doe 尝试使用绝对路径。当您在终端的目录中时,输入pwd,它将返回类似'/home/user/.virtualenvs/cv2_env/bin/python' 的内容。在脚本中使用该输出而不是使用 ~/.virtualenvs/cv2_env/bin/python
    • 我现在没有错误。似乎要开始了。但是一段时间后我得到一个“Python结束”。但我认为我应该为此提出一个新问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-10-17
    • 2020-02-15
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多