структурировать использование пакетов извне виртуальной среды - PullRequest
0 голосов
/ 18 декабря 2018

Я уже задавал этот вопрос в сообществе 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, но легко видна таким образом.

...