Я уже задавал этот вопрос в сообществе 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 выдает ошибку, в которой нет модуля pandas.Но в уценке вывод панд загружается нормально.Исполняемый файл показан так же, как в virtualenv, но путь к импортированному пакету pandas - это пакеты сайтов библиотеки anaconda.
Может кто-нибудь пролить свет на то, что здесь происходит?Или как я заставляю сетчатку игнорировать мои пакеты анаконды и использовать только те, что в virtualenv.
В качестве дополнительного примечания эта проблема, по-видимому, не ограничивается rmarkdown, но легко видна таким образом.