安卓termux折騰手記:安裝Python庫加tasker調用

一篇舊文,基於之前的知乎問答,加上了安裝scipy/scikit-learn部分。實際上現在來看,安卓上用Qpython和Pydroid來操作python也不錯,畢竟在手機上還是ide用著更舒服。Qpython的ipython notebook用著就很舒服,不需要在手機瀏覽器里使用了,再有就是android模塊也有很多有用的功能。只可惜不支持Python3,另外很多庫也沒法安裝。Qpython的話Python2/3都支持,pip幾乎可安裝所有的第三方模塊,實在太強大了。要是能搞個類似於Qpython那種notebook,就簡直太完美了。

當然加上安卓上神器tasker的話就更好玩了,Qpython和termux這倆都提供了專門的插件可以進行交互,比如最簡單的,做個定時爬蟲之類。

1.termux簡介

1.1 簡介

termux是安卓手機上的一款軟體,相當於在安卓上搭建了一個Linux平台,所以在Linux上能幹的事情很多在手機上也都辦得到,比如本文就是介紹與python相關的內容。

實際上,得益於安卓平台的開放性,類似termux的手機神器著實不少。不說各類強大的編程IDE,單是termux這樣的Linux平台類軟體就很多,如GnuRoot系列,LinuxDisplay系列等。這其中termux很受人歡迎,對於我來說,其主要優點一是體積小,二是不需要root,三是網上能找到很多相關資源。

除了termux之外,它還有一大群兄弟姐妹們(各種插件)可供大家挑選使用,如下所示。

termux插件

1.2下載

官方給出了兩個地址,一是Google Play,二是Fiord。

這兩個地方略有區別,安裝包的簽名是不同的。所以如果要和termux家族的其他軟體聯合使用的話,最好在同一個來源下載。其次在Google play有些額外的軟體是付費應用,而Fiord上可以免費下載。

1.3 termux 初體驗

打開termux後的界面如下,包括兩部分。

termux首界面

1. 第一部分是termux官方網站和相關資源,實際上還有Github和Google Group。有啥問題到這些地方可以找到答案,像github和官方wiki就有很多資源可供進一步學習。

2. 第二部分介紹了個包管理器命令pkg,給出了四個命令。最後的help是通用的,前面分別是搜索/安裝/升級包。我理解跟linux的apt/apt-get, python的pip差不多,實際上直接用apt命令也可以的。

2 安裝python模塊

我們開始在termux上配置python編程環境了。

2.1 安裝python

1. 安裝python前首先更新安裝包

apt update

apt upgrade

2. 安裝python,目前模式最新版3.6.4。

python-dev也裝上,主要是有些第三方模塊用得著。假如安裝python2的話,把python改成python2就可以了。

pkg install python, python2

pkg install python-dev, python2-dev

Note:這裡用的是pkg,按道理apt也可以,不過這次一開始我用apt報錯了。

2.2 安裝科學計算包

作為愛學習的孩子,我們用python當然要搞一搞當前最熱門的數據分析跟機器學習了。

2.2.1 jupyter, numpy,matplotlib和pandas

方法來自這篇文章:Running Jupyter and the Scipy stack on Android

1. 安裝這四個包,首先安裝下依賴。

apt install python python-dev clang fftw libzmq libzmq-dev freetype freetype-dev libpng libpng-dev pkg-config

2. 正式安裝包

這四個包安裝方法類似,不過實際中安裝時很多人會踩坑,其中jupyter是最容易安裝的,一般沒問題。安好了就可以擁有ipython和jupyter notebook兩大神器了。

LDFLAGS=" -lm -lcompiler_rt" pip install jupyter

這裡pip之前加了東西,看到網上說是鏈接到數學庫編譯的意思。

剩下三個其中numpy是基礎包,是pandas和matplotlib的依賴包,方法類似。

LDFLAGS=" -lm -lcompiler_rt" pip install numpy matplotlib pandas

Note: 第一次一起安裝,結果matplotlib部分報錯。後來是先裝numpy,再一起裝pandas和matplotlib(termux可以開多個界面)成功了。

ipython和matplotlib

用ipython寫代碼可以使用各種魔法操作,termux里的界面看著也很漂亮,如下圖所示

termux/ipython界面

不過可以看到裡面```import matplotlib.pyplot```報錯了,主要是缺後端繪圖界面支持。命令行作圖確實也不大現實。但我們還是可以在手機上使用matplotlib的,畢竟還有jupyter notebook嘛。

在jupyter notebook作圖如下:

jupyter notebook in termux

2.2.2 安裝numpy,matplotlib可能遇到的問題

numpy,matplotlib可能在安裝時可能會有問題,這個跟各個模塊的版本號有關係。

安裝報錯不妨多試幾個版本。就是在最後加上版本號信息諸如``pip install numpy==1.12.1``` ```pip install matplotlib==1.2.0```

當然如果你還要一起安裝下面兩個模塊的話,還可以有別的解決方法。

2.2.3 安裝scipy和scikit-learn

這裡安裝後一個scikit-learn需要先安裝scipy。安裝時要用到gcc來編譯,不過從某版本開始termux官方版把gcc去除了。

參照官方wiki和Github的大致安裝方法如下:

1. 安裝curl.

pkg install curl

2. 命令行輸入以下命令

$ curl -L its-pointless.github.io | sh

這裡安裝了一個叫gnupg的東西,鏈接到了termux社區一位貢獻者(its-pointless)編譯的源中,其中把numpy和scipy都包括進去了(這個源里還包括很多其他資源,如R,octove等)。也就是說這倆直接編譯好了,只需要```pkg

install numpy, scipy``` 即可。

Github里原話是這樣的

This script essentially installs gnupg on your device and downloads and adds a public key to your apt keychain ensuring that all subsequent downloads are from the same source.

3. 上面已經說了,就是```pkg install numpy, scipy```

4.最後安裝scikit-learn就很簡單了,直接```pip install scikit-learn```就行。

假如前面那個方法按照numpy報錯,可以採用該方法

2.3 爬蟲模塊安裝

常見的幾個比如requests,BeautifulSoup4,lxml,scrapy。

前兩個很簡單,直接pip安裝就行。後兩個有一些依賴,而且安裝scrapy前必須要先裝lxml。

2.3.1 lxml,scrapy安裝

lxml

apt-get install libxml2 libxml2-dev libxslt libxslt-dev

pip install lxml

scrapy

apt install python python-dev clang libffi libffi-dev openssl openssl-dev libxml2 libxml2-dev libxslt libxslt-dev

pip install scrapy

3.termux/Tasker聯合使用

前面提到有個apk叫termux-task可以用。

安裝這個apk應用即可,具體使用方法:

1. Tasker任務里添加插件>termux:task,然後添加用termux編寫的腳本了。

2. 腳本放置位置是有要求的,就是要放到```~/.termux/tasker```文件夾里。需要在termux里創建該目錄(如下代碼所示),然後放入腳本就行。

mkdir -p .termux/tasker

3. 這個跟文件系統有關係。比如```~/.termux```. ~ 表示 $HOME, 對於termux來說也就是這個路徑 "/data/data/com.termux/files/home".手機未root時 這個目錄只有termux才有許可權訪問。

4. 實際測試時發現,termux中的可執行程序開頭必須加上聲明行才可以使用,不然都是當成sh腳本運行的。比如對於python文件,開頭要加上一行:

#!/data/data/com.termux/files/usr/bin/python

5. python程序中有文件操作時,沒辦法直接寫一個相對路徑,寫上絕對路徑是可以的。

比如之前提到的```.termux/tasker```文件夾中的xxx.py,

假如程序中有個寫入文件```data/xxx.csv```,要換成下面的絕對路徑:

/data/data/com.termux/files/home/.termux/tasker/data/xxx.csv

如下圖,為Tasker中添加Termux腳本的界面,這裡添加了一個py腳本,選擇在termux中運行

Tasker添加termux腳本

下圖即為茅台商城爬蟲腳本的執行界面

腳本運行結果

4.相關資源

Termux Wiki

termux in Github

推薦閱讀:

TAG:Python | Android | tasker |