📚 Termux 无 Root 学习开发系列
当前进度:阶段二 · 6/28
阶段一:环境搭建与终端基础 ✅ 已完成
阶段二:编程开发环境
01-05 环境搭建与终端基础(已完成)
06 Python 开发环境搭建(当前篇)
07 C/C++ 开发环境
08 Node.js 开发环境
09 Git 版本控制
阶段三至九共 19 篇,后续持续更新
06 Python 开发环境搭建:从 pip 到虚拟环境
难度:入门→进阶 | 前置:05 Vim/Neovim 与 tmux 终端工作流(下)
在手机上配置完整 Python 开发环境,编写第一个 API 调用脚本
读完本篇你将能:在 Termux 上安装 Python 3.12 并验证版本,用 pip 管理第三方包并配置国内镜像加速,创建 venv 虚拟环境实现项目隔离,安装 requests/flask/fastapi 等常用库并编写最小可运行示例,用 ruff 做代码检查和格式化,最终完成一个调用免费天气 API 的完整脚本。
📑 本文目录
01Python 安装与版本验证
02pip 包管理基础
03虚拟环境 venv:项目隔离
04常用库安装与最小示例
05科学计算环境(可选)
06开发工具:ipython 与 ruff
07运行 Python 脚本的三种方式
08调试技巧:print 与 pdb
09实操项目:天气 API 调用脚本
前五篇你已经搭建好了 Termux 环境,配置了 Neovim 编辑器和 tmux 终端复用器。从本篇开始,我们正式进入阶段二——编程开发环境。Python 是手机上最友好的编程语言之一:安装即用、无需编译、生态丰富。本篇将带你从零搭建完整 Python 开发环境,并在最后完成一个真实可运行的天气 API 调用脚本。
§1 Python 安装与版本验证
Termux 官方仓库直接提供 Python 包,一条命令即可安装。截至 2026 年 8 月,Termux 官方仓库安装的是 Python 3.12.x(当前稳定版):
安装完成后验证版本:
预期输出:
pip 随 Python 一起安装,无需单独操作。验证 pip:
预期输出(版本号可能略有不同):
Output
pip 25.0.1 from /data/data/com.termux/files/usr/lib/python3.12/site-packages/pip (python 3.12)
直接输入 python 可进入交互式 REPL(Read-Eval-Print Loop),实时执行 Python 代码:
Python REPL
python
>>> print("Hello, Termux!")
Hello, Termux!
>>> 2 ** 10
1024
>>> exit()
💡 小贴士
如果你需要 Python 3.13,可通过 Termux User Repository(TUR)安装:pkg install python3.13 -r tur。Python 3.14 社区构建版也已可用(adybag14-cyber/termux-python 项目),但非官方稳定版,不建议用于生产。新手直接用官方仓库的 Python 3.12 即可。
§2 pip 包管理基础
pip 是 Python 的包管理工具,类似 Termux 的 pkg。装好 Python 后 pip 就可直接使用。以下是最常用的操作:
| 操作 |
命令 |
| 安装单个包 |
pip install requests |
| 批量安装 |
pip install requests httpx beautifulsoup4 |
| 从文件安装 |
pip install -r requirements.txt |
| 查看已安装 |
pip list |
| 卸载包 |
pip uninstall 包名 |
| 升级 pip 自身 |
pip install --upgrade pip |
配置国内镜像源
默认 pip 从 PyPI 官方源下载包,在国内手机网络下速度极慢。配置清华镜像源后下载速度可提升 10 倍以上:
Shell
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
配置完成后,所有 pip install 都自动走清华源。也可以临时指定:
Shell
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
requirements.txt 依赖管理
当一个项目依赖多个包时,手动逐个安装不现实。标准做法是创建 requirements.txt 文件列出所有依赖:
requirements.txt
requests>=2.32
httpx>=0.27
beautifulsoup4>=4.12
flask>=3.0
一行命令即可安装全部依赖:
Shell
pip install -r requirements.txt
反过来,当你想导出当前环境的所有依赖时:
Shell
pip freeze > requirements.txt
§3 虚拟环境 venv:项目隔离
为什么需要虚拟环境?假设项目 A 需要 requests 2.28,项目 B 需要 requests 2.32——如果都装在全局环境里就会冲突。venv 的作用就是为每个项目创建独立的 Python 环境,互不干扰。
Python 3.12 内置了 venv 模块,无需额外安装。完整流程如下:
Shell
|
1
2
3
4
5
6
7
|
# 创建虚拟环境(在项目目录下)
python -m venv myproject-env
# 激活虚拟环境
source myproject-env/bin/activate
# 退出虚拟环境
deactivate
|
激活后,命令行提示符会多出 (myproject-env) 前缀。此时用 pip install 安装的包只存在于这个虚拟环境中,不影响全局 Python。
最佳实践:每个独立项目创建自己的 venv,项目目录结构如下:
项目结构
|
1
2
3
4
5
|
~/projects/weather-api/
├── myproject-env/ # 虚拟环境目录
├── weather.py # 主脚本
├── requirements.txt # 依赖清单
└── README.md
|
§4 常用库安装与最小示例
以下四个库覆盖了手机上最常见的 Python 使用场景:HTTP 请求、HTML 解析、Web 框架。每个库给出一个可以直接复制运行的最小示例。
requests:HTTP 请求
requests 是 Python 最经典的 HTTP 库,用 3 行代码就能发起 GET 请求:
Python (demo_requests.py)
|
1
2
3
4
5
6
7
8
9
|
import requests
resp = requests.get("https://httpbin.org/get")
print(f"状态码: {resp.status_code}")
print(f"响应体: {resp.json()}")
# 带参数的请求
resp2 = requests.get("https://httpbin.org/get", params={"q": "termux"})
print(resp2.json()["args"])
|
httpx:异步 HTTP 客户端
httpx 是 requests 的现代替代品,API 几乎一致,但额外支持异步请求(async/await),适合高并发场景:
Python (demo_httpx.py)
|
1
2
3
4
5
6
7
8
9
10
|
import httpx
# 同步用法(和 requests 一模一样)
resp = httpx.get("https://httpbin.org/get")
print(resp.status_code)
# 异步用法(需 asyncio)
async def fetch(url):
async with httpx.AsyncClient() as client:
return await client.get(url)
|
beautifulsoup4:HTML 解析
BeautifulSoup4 用于解析 HTML 文档,提取网页内容。配合 requests 可以实现简单的网页爬虫:
Python (demo_bs4.py)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import requests
from bs4 import BeautifulSoup
resp = requests.get("https://example.com")
soup = BeautifulSoup(resp.text, "html.parser")
# 提取所有链接
for link in soup.find_all("a"):
href = link.get("href")
if href:
print(f"链接: {href}")
print(soup.title.string)
|
flask:轻量 Web 框架
Flask 是 Python 最轻量的 Web 框架,几行代码就能在手机上启动一个 Web 服务器。在 Termux 里启动后,同一局域网的设备就能通过手机 IP 访问:
Python (demo_flask.py)
|
1
2
3
4
5
6
7
8
9
10
|
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Termux!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
|
运行后在同一局域网用浏览器访问 http://手机IP:8080 即可看到返回。
§5 科学计算环境(可选)
在手机上安装 numpy、pandas、scipy 等科学计算库有一个痛点:直接 pip install numpy 会触发从源码编译,在手机 ARM 处理器上耗时数十分钟甚至失败。以下两种方案可以秒级安装。
方案一:Termux 原生包
Termux 官方仓库提供了预编译的科学计算包,用 pkg 安装,秒级完成:
Shell
pkg install python-numpy python-pandas python-scipy
pkg install matplotlib
方案二:termux-pip(tpip)工具
termux-pip(命令名 tpip)是社区维护的预编译 wheel 仓库,提供 numpy/pandas/scipy 等包的 Termux 专用 wheel 文件,秒级安装:
Shell
pip install termux-pip
tpip install numpy pandas scipy
matplotlib 画图示例
手机上没有 GUI 显示窗口,matplotlib 需要设置 Agg 后端,将图表保存为图片文件查看:
Python (demo_plot.py)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import matplotlib
matplotlib.use("Agg") # 无头模式
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Sine Wave")
plt.savefig("sine.png") # 保存为图片
print("已保存 sine.png")
|
运行后用 termux-open sine.png 可以用手机图库打开生成的图表。
§6 开发工具:ipython 与 ruff
ipython:增强交互式 Python
Python 自带的 REPL 功能简陋——没有语法高亮、没有自动补全。ipython 8.x 提供了语法高亮、自动补全、魔术命令等增强功能,是探索性编程的利器:
安装后用 ipython 替代 python 进入交互环境,体验 Tab 补全和语法高亮:
IPython
ipython
In [1]: import os
In [2]: os. # 按 Tab 看到所有 os 模块成员
In [3]: ?print # 查看函数文档
In [4]: %time sum(range(1000000))
ruff:代码检查与格式化
ruff 是用 Rust 编写的 Python linter 和 formatter,速度极快,已替代 flake8 + isort + black 三件套成为主流选择。在手机上它的速度优势尤其明显:
两个核心命令:
Shell
ruff check . # 检查代码问题
ruff format . # 自动格式化代码
在 Neovim 中配置 ruff(承接第 04 篇)
上一篇配置的 Neovim 可以集成 ruff,实现保存时自动格式化。在 ~/.config/nvim/init.lua 中添加:
Lua (~/.config/nvim/init.lua)
|
1
2
3
4
5
6
7
8
9
|
-- Python 文件保存时自动用 ruff 格式化
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = { "*.py" },
callback = function()
local file = vim.fn.expand("%")
vim.cmd("!" .. "ruff format " .. file)
vim.cmd("edit")
end
})
|
§7 运行 Python 脚本的三种方式
在 Termux 中运行 Python 脚本有三种常用方式,各有适用场景:
Shell
|
1
2
3
4
5
6
7
8
9
|
# 方式一:直接运行脚本
python script.py
# 方式二:模块方式运行(如启动 HTTP 服务器)
python -m http.server 8080
# 方式三:后台运行(承接第 05 篇 tmux)
nohup python server.py &
# shebang 行(脚本第一行,直接 ./script.py 运行)
#!/data/data/com.termux/files/usr/bin/python
|
使用 shebang 行后,给脚本添加可执行权限即可直接运行:
Shell
chmod +x script.py
./script.py
💡 小贴士
tmux 内推荐用方式一。如果需要在后台持续运行 Web 服务器,用方式三 nohup ... & 或直接在 tmux 会话里运行——即使 detach 了会话,进程也不会被杀。
§8 调试技巧:print 与 pdb
print 调试
最简单的调试方式就是 print。Python 3.12 支持嵌套 f-string,可以直接在字符串中输出变量值:
Python
print(f"DEBUG: x={x}, type={type(x)}")
pdb 断点调试
当 print 不够用时,Python 内置的 pdb 调试器可以让你逐行执行代码、检查变量。在代码中插入断点:
Python (debug_demo.py)
|
1
2
3
4
5
6
7
8
9
|
def divide(a, b):
import pdb; pdb.set_trace()
result = a / b
return result
print(divide(10, 0))
# 运行后程序在断点处暂停
# Python 3.12+ 也可用 breakpoint() 替代
|
运行 python debug_demo.py 后程序会在断点处暂停,进入 pdb 交互模式。常用命令:
| 命令 |
功能 |
n |
下一步(不进入函数) |
s |
步入(进入函数内部) |
c |
继续运行到下一个断点 |
l |
查看当前代码上下文 |
p 变量名 |
打印变量值 |
q |
退出调试器 |
§9 实操项目:天气 API 调用脚本
现在把前面学到的所有知识串起来——创建虚拟环境、安装依赖、编写脚本、运行调试——完成一个调用免费天气 API 的完整项目。我们使用 Open-Meteo 免费天气 API(无需注册、无需 API Key)。
第一步:创建项目与虚拟环境
Shell
|
1
2
3
4
5
6
|
mkdir -p ~/projects/weather-api
cd ~/projects/weather-api
python -m venv myproject-env
source myproject-env/bin/activate
pip install requests
|
第二步:编写 weather.py
用 Neovim 编辑脚本:nvim weather.py。完整代码如下:
Python (weather.py)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import requests
import sys
# 城市坐标(纬度,经度)
CITIES = {
"beijing": (39.9, 116.4),
"shanghai": (31.2, 121.5),
"guangzhou": (23.1, 113.3),
"shenzhen": (22.5, 114.1),
}
def get_weather(city):
if city not in CITIES:
print(f"未知城市: {city}")
print(f"可选: {list(CITIES.keys())}")
return
lat, lon = CITIES[city]
url = f"https://api.open-meteo.com/v1/forecast"
params = {
"latitude": lat, "longitude": lon,
"current": "temperature_2m,weather_code,wind_speed_10m",
"timezone": "Asia/Shanghai"
}
resp = requests.get(url, params=params)
data = resp.json()
current = data["current"]
print(f"=== {city} 实时天气 ===")
print(f"温度: {current['temperature_2m']}°C")
print(f"风速: {current['wind_speed_10m']} km/h")
if __name__ == "__main__":
city = sys.argv[1] if len(sys.argv) > 1 else "beijing"
get_weather(city)
|
第三步:运行并查看输出
Shell
python weather.py shanghai
预期输出:
Output
=== shanghai 实时天气 ===
温度: 32.4°C
风速: 12.5 km/h
不带参数运行则默认查询北京:python weather.py。这个脚本调用了真实的 Open-Meteo API,返回的数据是实时的。
💡 小贴士
用 tmux 分屏:左窗格 Neovim 编辑 weather.py,右窗格运行脚本。修改代码后 Esc :w 保存,右窗格按 ↑ 调出上一条命令重新运行——这就是上一篇 tmux + Neovim 联动的实战应用。退出虚拟环境前记得 pip freeze > requirements.txt 保存依赖。
✏️ 动手练习
🟢 基础验证
创建一个 venv 虚拟环境,在其中安装 requests 库,编写一个 3 行脚本调用 https://httpbin.org/ip 并打印返回的 IP 地址,最后 deactivate 退出。
参考解法:python -m venv test-env → source test-env/bin/activate → pip install requests → 编写 import requests; print(requests.get("https://httpbin.org/ip").json()) → deactivate
🟡 组合应用
基于本篇天气脚本,扩展功能:在 CITIES 字典中添加至少 3 个新城市,让脚本支持 python weather.py all 参数,遍历所有城市并打印天气。用 ruff check weather.py 检查代码风格,再用 ruff format weather.py 格式化。
提示:在 if __name__ 块中判断 sys.argv[1] == "all",然后用 for city in CITIES 循环调用。
🔴 开放挑战
将天气脚本升级为 Flask Web 服务:访问 /weather/beijing 返回 JSON 格式天气数据,访问 / 返回所有支持的城市列表。用 tmux 后台运行,在同一局域网用手机浏览器访问验证。
方向:将 get_weather 改为返回 dict 而非直接 print,然后用 Flask 路由调用它。Flask 的 jsonify 函数可将 dict 转为 JSON 响应。记得 pip install flask 并在 venv 中运行。
📖 知识回顾
Python 3.12 安装
pip 包管理
清华镜像源加速
venv 虚拟环境
requirements.txt
requests/flask 库
tpip 科学计算
ruff 代码检查
pdb 调试
天气 API 脚本
下篇预告
07 C/C++ 开发环境
将搭建 Termux 上的 C/C++ 开发环境:安装 gcc/clang 编译器、make 构建工具、gdb 调试器,编写并编译第一个 C 程序,理解编译链接流程