有人问我Python怎么上手,干脆写一篇,省得每次都重复回答。

环境准备

我用的环境是 Ubuntu 22.04,其他系统差不多:

# 推荐用 pyenv 管理版本
curl https://pyenv.run | bash
pyenv install 3.12.4
pyenv global 3.12.4
# 虚拟环境
python -m venv .venv
source .venv/bin/activate

核心代码

直接上代码,这是我项目里用的:

# 异步请求示例 - 批量抓取
import asyncio
import aiohttp

async def fetch(session, url):
    async with session.get(url, timeout=aiohttp.ClientTimeout(total=10)) as resp:
        return await resp.text()

async def main():
    urls = [f"https://api.example.com/page/{i}" for i in range(1, 51)]
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, u) for u in urls]
        results = await asyncio.gather(*tasks, return_exceptions=True)
        success = sum(1 for r in results if not isinstance(r, Exception))
        print(f"完成 {success}/{len(urls)}")

asyncio.run(main())

踩过的坑

  1. 列表推导式虽爽,但数据量大的时候生成器更省内存
  2. 用 httpx 替代 requests,异步同步都支持
  3. pip install -r requirements.txt 加上 --no-deps 能避免依赖冲突
  4. f-string 比 format() 快,3.6+ 就别用 format 了

实际项目中的用法

之前写了个爬虫抓5万个页面,单线程跑了2小时。改成 aiohttp + asyncio 并发,20分钟搞定。注意设置好并发数和超时,不然会被反爬。

常见问题

pip install 超时怎么办?

换源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名。永久配置:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

编码问题 UnicodeDecodeError?

读文件的时候加 encoding="utf-8" 参数。别用系统默认编码,Windows 下默认是 gbk,坑死了。open("file", encoding="utf-8") 养成习惯。

虚拟环境太多管理不过来?

试试 pdm 或 poetry,比 venv + pip 好管多了。pdm 还支持自动切换 Python 版本。

以上就是我这段时间用 Python 的总结,欢迎交流。