9

我刚开始在 R 中使用 reticulate 包,但我仍然发现了一些问题。特别是,导入 matplotlib 并不顺利。我尝试了两种不同的方法,每种方法都有不同的错误消息。

首先,在 RStudio 的交互式 shell 中使用 repl_python:

library(reticulate)
use_python('/home/craig/anaconda3/bin/python')
py_discover_config()
repl_python()
import matplotlib.pyplot as plt

打开的 REPL Python shell 似乎具有正确的版本和所有内容,但是当我尝试导入 matplotlib.pyplot 时,我看到以下内容:

ImportError:/lib/x86_64-linux-gnu/libz.so.1:找不到版本“ZLIB_1.2.9”(/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/../ 需要../.././libpng16.so.16)

安装 zlib(使用sudo apt-get install lib64z1-dev lib64z1)似乎没有改变任何东西。FWIW,import matplotlib工作得很好,只要我不需要pyplot.

我也尝试在 R Markdown 文档中做同样的事情:

```{r}
library(reticulate)
py_discover_config()
```

```{python}
import matplotlib.pyplot as plt
```

这次我看到了:

py_get_attr_impl(x,name,silent)中的错误:AtributeError:模块'matplotlib'没有属性'pyplot'调用:... $.python.builtin.object -> py_get_attr -> py_get_attr_impl -> .Call 执行停止

有什么想法可能会在这里发生吗?

谢谢!

更新:正如我在评论中提到的,安装 reticulate 的开发者版本修复了一些问题,但不是全部。如果我尝试运行这个 Rmd:

```{r}
library(reticulate)
use_python('/home/craig/anaconda3/bin/python')
```

```{python}
import matplotlib.pyplot as plt
```

我收到以下错误消息:

Error in py_run_string_impl(code, local, convert) : 
  ImportError: /home/craig/anaconda3/lib/python3.6/site-packages/PyQt5/../../../libxcb-dri3.so.0: undefined symbol: xcb_send_request_with_fds

Detailed traceback: 
  File "<string>", line 1, in <module>
  File "/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py", line 116, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 60, in pylab_setup
[backend_name], 0)
  File "/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/backends/backend_qt5agg.py", line 16, in <module>
    from .backend_qt5 import (
  File "/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/backends/backend_qt5.py", line 18, in <module>
    import matplotlib.backends.qt_editor.figureoptions as figureoptions
  File "/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 20, in <module>
Calls: <Anonymous> ... force -> py_run_string -> py_run_string_impl -> .Call
Execution halted

当我尝试用谷歌搜索错误文本时,xcb 的类似错误似乎确实出现在一个上下文中,据我所知,它并不那么相关。

4

4 回答 4

5

通过将 R Markdown 代码块更改为:

```{r}
library(reticulate)
use_python('/usr/bin/python3')
```

```{python}
import matplotlib.pyplot as plt
```

我仍然不明白为什么,但它似乎reticulate与 anaconda 安装不兼容。也许这与 anaconda 被设置为与交互式 Jupyter 笔记本一起工作有关。

于 2018-04-20T18:56:39.067 回答
1

通过 sym 将 conda lib 文件链接到 /lib/x86_64-linux-gnu/,我能够让它与我的 conda 安装一起使用。

ln -s -f /opt/miniconda/lib/libz.so.1 /lib/x86_64-linux-gnu/libz.so.1

我注意到,如果我使用相同的导入单独运行 python,它工作得很好。看来 reticulate 并没有“看到” conda lib 作为 libz 的源,而是在/lib/x86_64-linux-gnu/目录中查找。

Python:3.6
Conda:4.5.1
操作系统:Ubuntu 14.04.1 LTS

于 2018-04-24T19:27:33.950 回答
0

我一直在使用 reticulate 和 R Markdown,你应该指定你的虚拟环境。例如我的 R Markdown 开始如下:

{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, cache.lazy = FALSE)
library(reticulate)

use_condaenv('pytorch')

然后,您可以使用任何一种语言工作。因此,对于使用 matplotlib 进行绘图,我发现您需要 PyQt5 模块才能使其顺利运行。以下是 R Markdown 中的一个很好的情节。

{python plot}
import PyQt5
import numpy as np
import pandas as pd
import os

import matplotlib.pyplot as plt
from matplotlib.pyplot import figure

data = pd.read_csv('Subscriptions.csv',index_col='Date', parse_dates=True)

# make the nice plot
# set the figure size
fig = plt.figure(figsize = (15,10))

# the series
ax1 = fig.add_subplot(211)
ax1.plot(data.index.values, data.Opens, color = 'green', label = 'Opens')

# plot the legend for the first plot
ax1.legend(loc = 'upper right', fontsize = 14)

plt.ylabel('Opens', fontsize=16)

# Hide the top x axis
ax1.axes.get_xaxis().set_visible(False)

#######  NOW PLOT THE OTHER SERIES ON A SINGLE PLOT

# plot 212 is the MI series

# plot series
ax2 = fig.add_subplot(212)
ax2.plot(data.index.values, data.Joiners, color = 'orange', label = 'Joiners')

# plot the legend for the second plot
ax2.legend(loc = 'upper right', fontsize = 14)

# set the fontsize for the bottom plot
plt.ylabel('Joiners', fontsize=16)

plt.tight_layout()
plt.show()

在此处输入图像描述

于 2019-09-06T18:59:39.767 回答
0

我在 reticulate 中发现了同样的错误,它不是从 anaconda 库中读取 zlib,而是从 /lib/x86_64-linux-gnu/ 中读取。

每次使用脚本时,我只需从终端运行以下行,而不是符号链接:

export LD_LIBRARY_PATH=/home/craig/anaconda3/lib/:$LD_LIBRARY_PATH

您实际上可以从 R 脚本内部运行它,给出:

system('export LD_LIBRARY_PATH=/home/craig/anaconda3/lib/:$LD_LIBRARY_PATH')
于 2019-05-14T13:30:32.513 回答