问题
我的默认Python是2.7,但我有一个需要Python 3.4的脚本。我试图在R中创建一个函数:
要在Python版本之间切换,我使用我的集群的“dotkit”系统,如下所示:
use Python-2.7
use Python-3.4
“use”是一个在我的.bashrc文件中导入的bash函数。它设置了我的所有路径变量(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
答案 0 :(得分:0)
当您致电system()
时,它使用的是/bin/sh
,而不是/bin/bash
。 sh
文件在启动时未读取.bashrc
文件,因此它不知道您在此处定义的任何功能。
要使用.bashrc
中的功能,您必须bash
来运行它:
system("bash -c 'use Python-3.4; python --version'")
编辑:关闭单引号的位置。