3

使用rpy2,我想检查是否安装了给定的包。如果是,我导入它。如果没有,我先安装它。

如何检查它是否已安装?

from rpy2 import *
if not *my package is installed*:
   rpy2.interactive as r
   r.importr("utils")
   package_name = "my_package"
   r.packages.utils.install_packages(package_name)
myPackage = importr("my_package")
4

3 回答 3

7

这是一个在 Python 端执行的函数(注意contriburl,应该设置为 CRAN 镜像,并且不处理安装库失败的情况)。

from rpy2.rinterface import RRuntimeError
from rpy2.robjects.packages import importr
utils = importr('utils')

def importr_tryhard(packname, contriburl):
    try:
        rpack = importr(packname)
    except RRuntimeError:
        utils.install_packages(packname, contriburl = contriburl)
        rpack = importr(packname)
    return rpack
于 2013-04-02T12:55:39.190 回答
1

您可以使用我从@SaschaEpskamp 对另一个 SO 帖子的回答中获得的以下功能:

pkgTest <- function(x)
  {
    if (!require(x,character.only = TRUE))
    {
      install.packages(x,dep=TRUE)
        if(!require(x,character.only = TRUE)) stop("Package not found")
    }
  }

并使用它来加载你的包:

r.source("file_with_pkgTest.r")
r.pkgTest("utils")

一般来说,我建议不要尝试在 Python 中编写太多 R 代码。只需创建一些满足您需要的高级 R 函数,并将它们用作 R 和 Python 之间的最小接口。

于 2013-04-02T10:57:23.083 回答
-1
   import sys,subprocess
   your_package = 'nltk' 

   package_names = subprocess.Popen([pip freeze], 
   stdout=subprocess.PIPE).communicate()[0]
   pakage = package_names.split('\n')

   for package in packages:
      if package ==your_package:
         print 'true'
于 2013-04-02T11:11:10.743 回答