这是我截至 2021 年 10 月的实验摘要。长话短说:我的平板电脑上有一个可以正常工作的 R(包含 tidyverse),我可以从 jupyter 访问它(这不是我在一般,但可能适合这个平台和我的使用 - 我不打算在 Android 上开发,只是尝试代码 sn-ps 等)。
这主要来自本文以及How do I install Jupyter notebook on an Android device?,以及其中的链接。
另外,请注意读者:我不是 Linux 方面的专家,更不是 Android 方面的专家,而且我对 Python 的了解很少。对于任何错误或不准确的陈述,我们深表歉意。
包括反复试验,整个过程花了我大约 5 个小时。现在我知道该怎么做了,我可能会在 1 或 2 内完成。
简介
Android 是伪装的 linux,因此原则上可以安装所有或大多数 linux 应用程序。但是,有几个警告:
- 您通常没有设备的 root 访问权限(除非它已被 root,这是另一种蠕虫);
- 编译二进制文件时,必须针对此特定架构进行编译。
由于这些原因,您不能总是使用普通的 .deb 或 .rpm 包,需要走一条有点复杂的路线。
此外,R-studio 似乎无法在没有 root 权限的情况下安装(因为它本身需要 root,或者因为它依赖于普通用户无法安装的库)。
假设你不想走根路线,你仍然可以管理很多事情。
您需要对 linux 命令 (cd, ls, chmod, ln...) 有一些基本的了解,并且至少需要了解如何在 linux 中安装和管理软件包(apt-get 或 pkg),在R (install.packages()) 和 python (pip install)。此外,如果您知道编译器是什么 (gcc),并且如果您意识到某些 R/python 包依赖于通常驻留在系统其他位置的已编译代码(二进制文件),也不会造成伤害。
Termux
Termux 是“一个 Android 终端模拟器和 Linux 环境应用程序”,一个在 Android 上运行的便携式 Linux 发行版(或多或少)。
很遗憾,目前 G-play 上的版本不是最新的,所以你想使用 f-droid 版本。因此,安装 f-droid,然后从 f-droid 安装 termux。
配置termux
您需要在 termux 上启动和运行基本工具(编译器等)。这将需要安装包,反过来,您需要为此平台编译的包。在 termux 中,许多包由运行相关存储库的“its-pointless”维护。所以,在 termux 中:
# basic utilities
pkg install curl gnupg
# Configure its-pointless repo
mkdir -p "$PREFIX/etc/apt/sources.list.d/"
echo "deb https://its-pointless.github.io/files/24 termux extras" > "$PREFIX/etc/apt/sources.list.d/pointless.list"
curl "https://its-pointless.github.io/pointless.gpg" | apt-key add
现在您可以安装更多实用程序,从它的毫无意义的 repo:
pkg install make \
clang \
gcc-9 \
libgfortran3 \
openssl \
libcurl \
libicu \
libxml2
并配置你的编译器
setupclang-gfort-9
R!
仍然在 termux 中,运行
pkg install r-base
在那个阶段,您的系统上应该有一个可以工作的 R(虽然纯粹基于文本,但您仍然可以使用外部编辑器和 source() 您的脚本)。
更好的东西?
你可能想要一个 GUI,或者更多的包(tidyverse)。很快,您将面临的主要问题是 linux 中的许多 R 包依赖于系统库,需要从 linux 安装。原则上,您应该能够从 install.packages() 安装完整的库(二进制文件和 R 代码),它会启动 gcc 以编译所需的任何代码;但实际上,编译似乎经常失败。可能 Android gcc 有它的怪癖......
因此,一般的想法是从 termux(或其无意义的)repo 安装您需要的 R 包,或者至少是它们所依赖的库。顺便说一下,python 库也是如此。
安装 R 包
在 R 中,尝试使用通常的 install.packages() 命令安装您需要的东西。如果需要编译某些东西,它可能会失败。仔细阅读错误 - 最终你会发现一行写着“缺少 libpango.so”。这告诉您,在这种情况下,您需要安装 pango,它恰好属于 pango 包:在 termux 中,运行 pkg install pango,然后返回 R 并重试。
此外,将您的软件包更新到最新版本 (pkg upgrade all) 不会有任何危害...
在堆栈溢出时,您会发现对 zlib、libpng 等的各种引用...阅读并解释错误消息。
在一种情况下(R 包 repr,需要 base64,它本身依赖于 libicu)我遇到了版本问题 - 其中一个 termux 包(错误地)需要旧版本的 libicuuc (libicuuc.so.68),而相同的 termux 在我的系统上安装了 libicuuc.so.69。在这种情况下,解决方法是在适当的目录中创建一个符号链接,如下所示
ln -s libicuuc.so.69 libicuuc.so.68
.. 系统很高兴地跟着链接 :-)
通过玩这个,我设法安装了 tidyverse,以及在 R 和 jupyter 之间建立连接所需的 IRkernel。 IRkernel 需要在 R 中配置:IRkernel::installspec()
VNC
Installing R on Android的一位用户提到可以安装VNC,获取Rcmdr。我没试过。
Jupyter
也可以安装 jupyter 或 jupyter-labs(一般情况下这不是我最喜欢的 IDE,但在 Android 设备上可能是一个合适的平台)。
Jupyter 是基于 python 的,因此您需要使用 Python 和 python 包玩同样的游戏。 Python 包是使用pip(来自 linux 命令行)安装的,编译的二进制文件也会有同样的问题。幸运的是,最棘手的 python 包是由 it-pointless for termux 打包的,所以在这里,你最终也会在 pip 之外安装很多东西。
Installing R on Android 建议在 termux 之上安装 ubuntu,然后在 ubuntu 中安装 jupyter。我觉得没必要 (How do I install Jupyter notebook on an Android device?)
Termux 需要更多包:
pkg install python fftw libzmq freetype libpng pkg-config libcrypt
还有对modejs、liblapack-dev和libopenblas-dev的引用,我不记得它们最终是否需要(或者已经被其他东西安装了)。有时也会将相关代码从 dev 包中移出到一个稳定的包中(所以它会是 liblapack)
然后,你需要安装 python 的东西。网络来源建议
LDFLAGS="-lm -lcompiler_rt" pip install jupyter
或/和,取决于您要使用的版本
LDFLAGS="-lm -lcompiler_rt" pip install jupyter-lab
和(在 jupyter 中不是必需的,但很有用):
LDFLAGS="-lm -lcompiler_rt" pip install numpy matplotlib
我不确定我们为什么需要 LDFLAGS...
和以前一样,一些“混合”包最好从 termux 安装,例如 scipy(技术上是一个 python 包,应该使用pip install scipy 安装)更容易安装(或者必须安装?)使用 termux版本,所以pkg install scipy
同样,需要进行一些调试。阅读 pip 输出,尝试找出哪个包安装失败,看看你可以从 termux 做什么,再试一次。有时我发现删除 LMFLAGS 会有所帮助(或逐个安装软件包),例如普通的 pip install cffi 和 pip install pyzmq 比将它们安装为 jupyter 的依赖项效果更好。不知道为什么。
最后,我启动了 jupyter(在 termux 控制台中输入 jupyter notebook 或 jupyter lab,复制 url,在浏览器中打开)......只是在第一个命令时 R 崩溃。回到 termux,我可以看到它仍然缺少某个库,我从 termux 跟踪并安装了它(我认为这次是 pango)。
简而言之:阅读友好的错误消息!