【问题标题】:Want to activate a virtual environment from terminal with Octave/Matlab想要使用 Octave/Matlab 从终端激活虚拟环境
【发布时间】:2021-07-06 16:41:45
【问题描述】:

我想使用 Linux 执行 bash 命令来激活带有 Octave 的虚拟环境。我真正想做的是使用 Octave/Matlab 运行 DeepSpeech。

我要使用的命令是 source $HOME/tmp/deepspeech-venv/bin/activate

我自己尝试的代码行是system("source $HOME/tmp/deepspeech-venv/bin/activate")

我得到的输出是sh: 1: source: not found

我在帖子上看到this 的回答并尝试了此命令setenv('PATH', ['/source $HOME/tmp/deepspeech-venv/bin/activate', pathsep, getenv('PATH')]),但没有任何帮助,它返回了相同的错误。

【问题讨论】:

  • Octave 有虚拟环境吗?我不知道这个!我知道 MATLAB 没有,请从问题中删除 MATLAB 标签。

标签: command virtualenv octave mozilla-deepspeech


【解决方案1】:

您的问题还不是很清楚,但我假设您正在尝试在 octave/matlab 中运行 python 命令,并且您希望为此使用 python 虚拟环境。

不幸的是,当您在 octave 内运行 system 命令时,最有可能发生的情况是,这会创建一个子 shell 来执行您的命令,一旦命令完成,该子 shell 就会被丢弃。

你有几个选项来纠正这个问题,但我认为最简单的方法是先激活 python 虚拟环境,然后在该环境中运行你的 octave 实例。然后,这会继承运行 octave 时存在的所有环境变量。您可以通过getenv( 'VIRTUAL_ENV' ) 确认这一点。

如果这不是一个选项,那么您可以确保所有旨在运行 python 脚本的系统命令都以对虚拟环境的调用为前缀(例如 system( 'source ./my/venv/activate; python3 ./myscript.py') 之类的东西)。

或者,您可以尝试使用setenv 命令手动从其导出的变量重新创建虚拟环境。

【讨论】:

  • 谢谢,我在一个系统调用中添加了所有命令,使用 ;把每一个分开,它就起作用了。你能告诉我如何使变量名动态化吗?例如 system('cd {path}', '/Desktop/Folder1')
  • 'system' 命令允许您将被调用进程的终端输出收集为字符串,如果您使用两个输入参数调用它,即[Status, Output] = system(...)。请查看help system 了解更多信息。
  • 关于修改后的注释,由于你传递给system命令的是一个纯字符串,你可以先使用sprintf构造这个字符串,实现你想要的格式和变量替换,然后将生成的字符串传递给system
猜你喜欢
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2021-06-15
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多