2016-08-13 69 views
9

Python中是否有像requirements.txt這樣的功能,您可以在其中存儲用於文件的軟件包列表,並且只要其他人想要運行程序並需要安裝依賴關係,他們就可以執行pip install -r requirements.txt有沒有像R的requirements.txt?

我認爲,這在將R腳本部署到生產中時有很大幫助。如果沒有這樣的功能,我該如何複製它?

+1

你指的是什麼「功能」? requirements.txt應該做什麼? – MrFlick

+1

不能說出你在問什麼(而且我還不是其中的一員)。部署通常使用一個包來完成。可能是包描述文件或者'.Rprofile'文件中的內容。 –

+2

嘗試使用'packrat' – hrbrmstr

回答

3

根據註釋,您可能需要考慮構建一個包,並在DESCRIPTION文件中包含需求。如果您正在討論將.R腳本「投入生產」,您可以在開始時添加一個函數,以確保安裝所需的軟件包。以下是我自己的軟件包中的一些內容,我可以在任何腳本的開始處致電pkgLoad(<list of packages>)以確保軟件包已安裝並加載。我有我最喜歡的包的列表,使得pkgLoad()安裝和載入我所有通常的嫌疑人的電話:

pkgLoad <- function(packages = "favourites") { 

    if(length(packages) == 1L && packages == "favourites") { 
     packages <- c("data.table", "chron", "plyr", "dplyr", "shiny", 
         "shinyjs", "parallel", "devtools", "doMC", "utils", 
         "stats", "microbenchmark", "ggplot2", "readxl", 
         "feather", "googlesheets", "readr", "DT", "knitr", 
         "rmarkdown", "Rcpp" 
     ) 
    } 

    packagecheck <- match(packages, utils::installed.packages()[,1]) 

    packagestoinstall <- packages[ is.na(packagecheck) ] 

    if(length(packagestoinstall) > 0L) { 
     utils::install.packages(packagestoinstall, 
          repos = "http://cran.csiro.au" 
     ) 
    } else { 
     print("All requested packages already installed") 
    } 

    for(package in packages) { 
     suppressPackageStartupMessages(
      library(package, character.only = TRUE, quietly = TRUE) 
     ) 
    } 

} 

注意我已經建立了我最喜歡的CRAN成鏡的功能,所以請確保您編輯的你自己的需求。

+1

以典型的美國風格,我把澳大利亞的域名擴展混淆爲奧地利,並想知道爲什麼不從最近的鏡子下載,特別是因爲它是CRAN的中央鏡子。 – shayaa