我已经在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,而是可以通过这种方式轻松看到。