使用来自外部虚拟环境的软件包来显示

时间:2018-12-18 13:27:33

标签: r r-markdown reticulate

我已经在RStudio社区https://community.rstudio.com/t/reticulate-using-packages-from-outside-virtual-env/19935上问过这个问题,但是没有运气。

一段时间以来,我一直在使用Rmarkdown从python代码生成报告。但是最近偶然发现了一些行为,这些行为导致其他用户在其计算机上生成报告时出现了问题。

看来,虚拟环境外部的python软件包能够在创建文档时导入。

我整理了一个快速的bash脚本来重现此行为

#!/bin/bash

# new virtual environment
# no packages should be installed
virtualenv venv

cat > markdown_test.Rmd << EOF

# Issue

\`\`\`{r}
library(reticulate)
use_virtualenv('./venv')
\`\`\`

In a new environment this should cause an error with missing pandas

\`\`\`{python}
import sys
sys.executable
import pandas
pandas.DataFrame([1,2,3])
print(pandas.__path__)
\`\`\`

does not cause an error

## For info

\`\`\`{r}
sessionInfo()
py_config()

getwd()
\`\`\`

EOF

cat > py_test.py << EOF
import sys
logf = open('output.log','w')
logf.write(str(sys.executable) + '\n')

try:
  import pandas
except Exception as e:
  logf.write(str(e) + '\n')
finally:
  pass

EOF

. venv/bin/activate

Rscript -e "rmarkdown::render('markdown_test.Rmd')"

python py_test.py
# causes an error but output.log contains the same executable path

deactivate

对我来说,python的输出日志文件给出了一个错误,指出没有模块熊猫。但是在降价输出中,熊猫加载良好。可执行文件显示为virtualenv中的可执行文件,但是导入的pandas软件包的路径是anaconda库site-packages。

有人可以阐明这里可能发生的情况吗?或者,我如何强制网纹忽略我的anaconda软件包,而仅在virtualenv中使用它们。

需要特别注意的是,该问题似乎并不局限于rmarkdown,而是可以通过这种方式轻松看到。

0 个答案:

没有答案