RStudio 显示不同的 $PATH 变量
Posted
技术标签:
【中文标题】RStudio 显示不同的 $PATH 变量【英文标题】:RStudio shows a different $PATH variable 【发布时间】:2015-09-16 06:26:37 【问题描述】:可能是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 中的system() 来调用它们。例如,在我的 .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?
【问题讨论】:
【参考方案1】:当您从命令行启动 R 然后运行 system(echo $PATH)
时,您将从命令行会话继承 Bash 环境。例如,当您从 Mac 上的 Dock 或 Finder 或作为 Ubuntu 中的系统应用程序而不是从命令行启动 RStudio 时,RStudio 不会从您的 /.bashrc
获取其环境。相反,它将从系统范围的设置中获取环境变量。它如何找到这些系统设置将取决于操作系统。
Ubuntu
在 Ubuntu 中查看 this explanation of environment variables,尤其是 section on desktop applications。
根据那个解释:
您可以通过编辑应用程序的 .desktop 文件将环境变量添加到应用程序。例如,要使用环境变量 APPMENU_DISPLAY_BOTH=1 运行“digiKam”,请找到相应的 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
系统范围的环境变量由启动代理而不是 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。
【讨论】:
我使用的是 Linux (Ubuntu v15.04)。更新了我的问题。 @JoshBradley:我已经更新了答案以包括 Ubuntu。 谢谢。将绝对路径env PATH=/path/to/bcftools-1.2/htslib-1.2.1/tabix
添加到 .desktop 文件有效。为了获得更好的解决方案,我尝试使用env PATH=$PATH
或env PATH=$PATH
将其设置为扩展当前PATH,但RStudio PATH 变量不正确。
@LincolnMullen 嗨,林肯,您的解决方案确实解决了我的问题。所以非常感谢。同时,请问如何在rstudio中也使用这种方法添加dyld_library_path?由于 system('echo $DYLD_LIBRARY_PATH') 在终端中返回一些路径时不返回任何内容。谢谢你!【参考方案2】:
我通过将 PATH 添加到 ~/.Renviron 解决了这个问题(在 MAC 上) 你可以运行这个:
$ touch ~/.Renviron | R_PATH="PATH=$PATH" | echo $R_PATH > ~/.Renviron
并重新启动 Rstudio。现在你应该在这两种情况下都有相同的 $PATH。
【讨论】:
这种方法在使用doParallel
进行并行处理时会出现问题。请参阅this question 了解更多信息。【参考方案3】:
我遇到了同样的问题。而不是林肯的答案,我在 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()
【讨论】:
此更改对当前会话是否持久或有效? 当我把它放在我的 .Renviron 中时,它可以工作,但 RStudio 仍然将/usr/local/bin
预先挂在前面,这不是我想要的
@HarryM 你找到解决办法了吗?我还在为 /usr/bin 预先添加 $PATH 的 rstudio 苦苦挣扎以上是关于RStudio 显示不同的 $PATH 变量的主要内容,如果未能解决你的问题,请参考以下文章