问题
我的默认Python版本是2.7,但我有一个需要Python 3.4的脚本。我正在尝试创建一个R函数来:
- 切换至Python 3.4
- 运行这个脚本
- 切换回Python 2.7
- 将结果导入R中
为了在Python版本之间进行切换,我使用了我的集群的“dotkit”系统,如下所示:
use Python-2.7
use Python-3.4
"use"是一个bash函数,被导入到我的.bashrc文件中。它设置了所有的路径变量(PATH、LIBRARY_PATH、LD_LIBRARY_PATH、CPATH、C_INCLUDE_PATH等)。问题在于,当我尝试在R中调用这个函数时,会出现以下错误:
system('use Python-3.4')
sh: use: command not found
看起来这是我的 PATH 的问题。我正在使用正确的 shell:
system('echo $SHELL')
/bin/bash
我的$PATH变量看起来也很好。然而,当我创建一个基本上做同样事情的脚本时:
load_py34.sh:
#!/bin/bash
source ~/.bashrc
use Python-3.4
通过R调用此脚本后,实际运行了,但出于某种原因,在R中并没有更改我的Python版本。(我已验证此脚本可以从命令行正常工作。)
> R
> system('python --version')
Python 2.7.1
> system('sh load_py34.sh')
Prepending: R-3.4 (ok)
> system('python --version')
Python 2.7.1
我有点困惑,但如果有人能帮忙,我会非常感激。
建议的修复方法
当我将它们组合成一个命令时,仍然存在相同的问题:
> system("sh load_py34.sh; python --version")
Prepending: Python-3.4 (already loaded)
Python 2.7.1
当我尝试直接调用bash时,PATH仍然存在问题:
> system("bash -c 'use Python-3.4; python --version'")
bash: use: command not found
Python 2.7.1