RStudio显示了一个不同的$ PATH变量

时间:2015-06-29 17:12:29

标签: r rstudio path-variables

可能duplicate的问题,但我不知道RStudio的启动过程,以判断问题是否相同。我在Linux上使用RStudio Desktop v0.99.442。从RStudio里面的控制台,我运行

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

然而,我的真实$PATH(我从控制台看到echo $PATH时)上面有很多其他程序,我希望能够使用系统调用(来自R。例如,在我的.bashrc中,我将tabix附加到$PATH

奇怪的是当我从控制台中的R会话中运行相同的命令时,我得到了

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix

这是正确的。因此,RStudio中的R会话与控制台中的R会话之间存在差异。它们不会加载相同的环境变量。如何让RStudio使用正确版本的$ PATH?

3 个答案:

答案 0 :(得分:15)

从命令行启动R然后运行system(echo $PATH)时,您将从命令行会话继承Bash环境。当您从Mac上的Dock或Finder或Ubuntu中的系统应用程序启动RStudio而不是从命令行启动时,RStudio不会从您的/.bashrc获取其环境。相反,它将从系统范围的设置中获取环境变量。如何找到这些系统设置将取决于操作系统。

Ubuntu的

请参阅Ubuntu中的this explanation of environment variables,尤其是section on desktop applications

根据这个解释:

  

您可以通过编辑其.desktop文件将环境变量添加到应用程序。例如,运行" digiKam"使用环境变量APPMENU_DISPLAY_BOTH = 1,找到相应的digikam.desktop文件,并通过env命令将变量的设置添加到条目" Exec":

RStudio .desktop文件位于~/.local/share/applications//usr/share/applications/(很可能是后者)。编辑该文件以包含此行:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix

的Mac

系统范围的环境变量由Launch Agent设置,而不是由Bash设置。具体如何为从Finder启动的应用程序设置环境变量将取决于您的Mac OS X版本。answer might help

我这样做的方法是添加一个包含以下内容的文件~/Library/LaunchAgents/com.username.envvariables.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.username.envvariables</string>
    <key>ProgramArguments</key>
    <array>
      <string>sh</string>
      <string>-c</string>
      <string>
        launchctl setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix
      </string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

然后您必须加载该文件:

launchctl load ~/Library/LaunchAgents/com.username.envvariables.plist

您可能需要重新启动Finder:

killall -KILL Dock

然后重启RStudio。

答案 1 :(得分:1)

我遇到了同样的问题。代替林肯的答案,我在RStudio控制台中手动设置了正确的环境,方法是

Sys.setenv(PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix")

在这种情况下。

R正在使用的路径也可以在控制台中通过以下方式检查

Sys.getenv()

答案 2 :(得分:0)

我通过向〜/ .Renviron添加PATH解决了这个问题(在MAC上) 你可以运行:

$ touch ~/.Renviron | R_PATH="PATH=$PATH" | echo $R_PATH >  ~/.Renviron

并重新启动Rstudio。现在你应该在两种情况下都有相同的$ PATH。