1. Linux环境下Python3安装与开发环境搭建指南
作为一个在Linux环境下摸爬滚打多年的开发者,我深知搭建一个稳定高效的Python开发环境对项目开发的重要性。不同于Windows系统的"一键安装",Linux环境下Python环境的配置往往需要更多的手动操作和系统级调整,这也是很多初学者容易踩坑的地方。
本文将基于最新的Ubuntu 22.04 LTS系统,带你从零开始完成Python3的安装、环境配置到完整开发环境的搭建。我会分享这些年积累的实用技巧和避坑经验,包括如何避免系统Python与自定义Python的冲突、虚拟环境的最佳实践、开发工具链的配置等。无论你是刚接触Linux的新手,还是需要为团队搭建统一开发环境的资深开发者,这份指南都能提供切实可行的解决方案。
2. 系统准备与Python3安装
2.1 系统环境检查与准备
在开始安装前,我们需要先检查系统环境。打开终端(Ctrl+Alt+T),执行以下命令查看当前系统信息:
bash复制lsb_release -a
uname -m
这两个命令分别会显示系统版本和架构信息。对于Python安装来说,特别需要注意系统是x86_64(64位)还是arm架构,这关系到后续某些二进制包的兼容性。
注意:如果你的系统是较旧的Ubuntu版本(如18.04),建议先升级系统,因为不同Ubuntu版本默认的Python3版本差异较大。可以使用
sudo do-release-upgrade进行系统升级。
2.2 安装Python3的多种方式对比
Linux系统安装Python3主要有以下几种方式,各有优缺点:
-
系统包管理器安装(最简单)
bash复制sudo apt update sudo apt install python3优点:简单快捷,自动处理依赖
缺点:版本可能不是最新的 -
源码编译安装(最灵活)
bash复制wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6 ./configure --enable-optimizations make -j 8 sudo make altinstall优点:可以安装任意版本,优化编译选项
缺点:过程复杂,需要手动解决依赖 -
使用pyenv管理多版本(推荐)
bash复制curl https://pyenv.run | bash echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc source ~/.bashrc pyenv install 3.10.6优点:可以轻松切换多个Python版本
缺点:初次配置稍复杂
对于大多数开发场景,我推荐使用pyenv方式,特别是当你需要同时维护多个项目且这些项目依赖不同Python版本时。pyenv可以让你在不同目录下使用不同的Python版本,避免全局版本冲突。
2.3 验证安装与基本配置
安装完成后,验证Python是否正常工作:
bash复制python3 --version
which python3
如果一切正常,你应该能看到类似这样的输出:
code复制Python 3.10.6
/usr/bin/python3
接下来配置pip(Python包管理工具)的国内镜像源以加速下载:
bash复制mkdir -p ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
这个配置会将pip的源切换到阿里云镜像,大幅提升国内下载速度。
3. 开发环境搭建
3.1 虚拟环境配置
Python开发中最重要的实践之一就是使用虚拟环境。虚拟环境可以为每个项目创建独立的Python运行环境,避免包版本冲突。以下是两种常用的虚拟环境管理方式:
-
venv模块(Python3内置)
bash复制python3 -m venv myproject_env source myproject_env/bin/activate -
virtualenv工具(功能更丰富)
bash复制pip install virtualenv virtualenv --python=python3.10 myproject_env source myproject_env/bin/activate
激活虚拟环境后,你的终端提示符前会出现环境名称,如(myproject_env) user@host:~$。这时所有pip安装的包都会安装到这个虚拟环境中,不会影响系统全局Python环境。
实用技巧:在项目根目录下创建
.envrc文件(需先安装direnv工具),可以实现在进入目录时自动激活虚拟环境,离开目录时自动退出,极大提高开发效率。
3.2 开发工具链配置
一个完整的Python开发环境通常需要以下工具:
-
代码编辑器/IDE
- VS Code:轻量级,插件丰富
- PyCharm:专业Python IDE,功能全面
- Vim/Emacs:适合命令行重度用户
-
代码质量工具
bash复制
pip install flake8 pylint black isort- flake8:代码风格检查
- pylint:静态代码分析
- black:自动化代码格式化
- isort:自动排序import语句
-
调试工具
- pdb:Python内置调试器
- ipdb:增强版的pdb
- pudb:基于终端的可视化调试器
-
测试框架
bash复制
pip install pytest pytest-cov- pytest:现代Python测试框架
- pytest-cov:测试覆盖率工具
建议在VS Code中安装以下扩展:
- Python (Microsoft)
- Pylance
- Jupyter
- Python Test Explorer
3.3 项目结构规范
一个规范的Python项目通常遵循以下目录结构:
code复制myproject/
├── .gitignore
├── README.md
├── requirements.txt # 生产环境依赖
├── requirements-dev.txt # 开发环境依赖
├── setup.py # 项目打包配置
├── src/ # 项目源代码
│ └── myproject/
│ ├── __init__.py
│ └── module1.py
├── tests/ # 测试代码
│ ├── __init__.py
│ └── test_module1.py
└── docs/ # 文档
└── index.md
这种结构清晰地区分了源代码、测试和文档,便于团队协作和长期维护。
4. 常见问题与解决方案
4.1 Python版本冲突问题
问题现象:执行python命令启动的是Python2而非Python3。
解决方案:
bash复制sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
这条命令将系统默认的python命令指向python3。如果系统中有多个Python3版本,可以进一步使用update-alternatives进行管理:
bash复制sudo update-alternatives --config python
4.2 pip安装权限问题
问题现象:pip安装包时提示权限不足。
错误做法:使用sudo pip install
正确做法:
- 使用虚拟环境(推荐)
- 或使用
--user选项:bash复制
pip install --user package_name
4.3 依赖管理最佳实践
-
生成requirements文件
bash复制
pip freeze > requirements.txt -
精确控制依赖版本
code复制package==1.2.3 # 精确版本 package>=1.2.3,<2.0.0 # 版本范围 -
分离生产和开发依赖
- requirements.txt:生产环境必须的依赖
- requirements-dev.txt:开发工具、测试框架等
4.4 性能优化技巧
-
使用更快的pip源
bash复制
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name -
构建时启用PGO优化(仅源码安装时)
bash复制
./configure --enable-optimizations -
使用uvloop提升异步IO性能
bash复制
pip install uvloop然后在代码中:
python复制import asyncio import uvloop asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
5. 高级配置与优化
5.1 使用pyenv管理多版本Python
pyenv是管理多个Python版本的绝佳工具。安装配置后,可以轻松切换不同版本的Python:
bash复制pyenv install 3.9.13 # 安装特定版本
pyenv global 3.10.6 # 设置全局默认版本
pyenv local 3.9.13 # 设置当前目录使用的版本
pyenv versions # 查看已安装版本
5.2 使用poetry进行依赖管理
poetry是现代Python项目的依赖管理工具,比传统的pip+requirements.txt方式更强大:
bash复制pip install poetry
poetry new myproject # 创建新项目
cd myproject
poetry add requests # 添加依赖
poetry install # 安装所有依赖
poetry shell # 进入项目虚拟环境
poetry会自动管理虚拟环境,生成精确的依赖锁文件(pyproject.toml和poetry.lock),非常适合团队协作项目。
5.3 配置Jupyter Notebook开发环境
对于数据科学项目,Jupyter Notebook是不可或缺的工具:
bash复制pip install jupyterlab
jupyter lab # 启动Jupyter Lab
为了提高使用体验,可以配置以下选项:
-
修改默认工作目录
bash复制mkdir -p ~/jupyter_projects jupyter notebook --generate-config echo "c.NotebookApp.notebook_dir = '$HOME/jupyter_projects'" >> ~/.jupyter/jupyter_notebook_config.py -
添加内核快捷方式
bash复制python -m ipykernel install --user --name myenv --display-name "Python (myenv)" -
启用扩展
bash复制
pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user
5.4 容器化开发环境
对于复杂的项目,可以考虑使用Docker容器化开发环境:
dockerfile复制# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
然后构建并运行:
bash复制docker build -t mypythonapp .
docker run -it --rm -p 8000:8000 mypythonapp
这种方式可以确保开发环境与生产环境完全一致,避免"在我机器上能运行"的问题。
6. 实际项目配置示例
6.1 Django项目完整配置流程
让我们以一个Django项目为例,展示完整的开发环境配置:
-
创建项目目录并进入
bash复制mkdir mydjango && cd mydjango -
创建虚拟环境并激活
bash复制python -m venv venv source venv/bin/activate -
安装Django和其他依赖
bash复制
pip install django psycopg2-binary -
创建Django项目
bash复制
django-admin startproject core . -
配置数据库(以PostgreSQL为例)
python复制# core/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydb', 'USER': 'myuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '5432', } } -
开发环境额外工具
bash复制
pip install ipython django-extensions django-debug-toolbar -
配置开发工具
python复制# core/settings.py INSTALLED_APPS += ['debug_toolbar', 'django_extensions'] MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware'] + MIDDLEWARE INTERNAL_IPS = ['127.0.0.1'] -
运行开发服务器
bash复制
python manage.py runserver
6.2 自动化脚本示例
为了提高效率,可以创建一些常用的自动化脚本:
bash复制#!/bin/bash
# dev.sh
# 启动开发环境
source venv/bin/activate
python manage.py runserver
bash复制#!/bin/bash
# test.sh
# 运行测试
source venv/bin/activate
pytest --cov=.
记得给脚本添加执行权限:
bash复制chmod +x dev.sh test.sh
7. 性能监控与优化
7.1 基本性能监控工具
-
内存使用分析
bash复制
pip install memory_profiler使用方式:
python复制from memory_profiler import profile @profile def my_func(): # 你的代码 pass -
执行时间分析
bash复制
pip install line_profiler使用方式:
python复制@profile def slow_func(): # 需要分析的函数 pass然后运行:
bash复制
kernprof -l -v script.py -
系统资源监控
bash复制
pip install psutil
7.2 高级优化技巧
-
使用Cython加速关键代码
bash复制
pip install cython然后创建.pyx文件并编译:
python复制# fast.pyx def compute(int n): cdef int i cdef int s = 0 for i in range(n): s += i return s编译:
bash复制
cythonize -i fast.pyx -
使用PyPy替代CPython
PyPy是Python的JIT实现,对某些类型的代码可以显著提升性能:bash复制sudo apt install pypy3 pypy3 script.py -
多进程处理CPU密集型任务
python复制from multiprocessing import Pool def process_item(item): # 处理单个项目 return result if __name__ == '__main__': with Pool(4) as p: # 使用4个进程 results = p.map(process_item, items)
8. 安全配置建议
8.1 Python环境安全
-
定期更新Python版本
bash复制sudo apt update && sudo apt upgrade python3 -
检查依赖安全性
bash复制
pip install safety safety check -
使用hash校验requirements
bash复制pip freeze --all | pip hash
8.2 项目安全配置
-
敏感信息管理
- 使用python-dotenv管理环境变量
- 永远不要将敏感信息提交到版本控制
-
Django安全配置示例
python复制# settings.py SECURE_HSTS_SECONDS = 31536000 # 1年 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True -
API安全
- 使用HTTPS
- 实现适当的认证和授权
- 限制请求频率
9. 持续集成与部署
9.1 GitHub Actions配置示例
yaml复制# .github/workflows/test.yml
name: Python CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: Run tests
run: |
pytest --cov=.
9.2 Docker生产部署示例
dockerfile复制# Dockerfile.prod
FROM python:3.10-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
FROM python:3.10-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "core.wsgi"]
构建并运行:
bash复制docker build -t myapp -f Dockerfile.prod .
docker run -d -p 8000:8000 --name myapp myapp
10. 实用工具推荐
10.1 开发辅助工具
-
HTTP客户端
- httpie:现代curl替代品
bash复制
pip install httpie http GET https://api.example.com
- httpie:现代curl替代品
-
数据库工具
- pgcli:PostgreSQL命令行客户端
- mycli:MySQL命令行客户端
-
系统监控
- glances:全能系统监控工具
bash复制
pip install glances glances
- glances:全能系统监控工具
10.2 生产力工具
-
tmux:终端复用器
bash复制sudo apt install tmux tmux new -s dev -
fzf:模糊查找工具
bash复制sudo apt install fzf # 结合历史命令搜索 bind '"\C-r": "\C-x1\e^\er"' -
tldr:简化版man手册
bash复制
pip install tldr tldr tar
11. 终端环境美化
11.1 Oh My Zsh配置
-
安装Zsh和Oh My Zsh
bash复制sudo apt install zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" -
配置主题和插件
bash复制# ~/.zshrc ZSH_THEME="agnoster" plugins=(git python pip docker) -
安装Powerline字体
bash复制sudo apt install fonts-powerline
11.2 实用的Shell别名
bash复制# ~/.bashrc 或 ~/.zshrc
alias pyclean="find . -type f -name '*.py[co]' -delete -o -type d -name '__pycache__' -delete"
alias venv="source venv/bin/activate"
alias jn="jupyter notebook"
alias dcup="docker-compose up -d"
alias dcdown="docker-compose down"
12. 远程开发配置
12.1 VS Code远程开发
- 安装Remote - SSH扩展
- 配置SSH密钥
bash复制
ssh-keygen -t ed25519 ssh-copy-id user@remote_host - 通过VS Code连接到远程服务器
12.2 Jupyter远程访问
-
生成配置文件
bash复制
jupyter notebook --generate-config -
设置密码
bash复制
jupyter notebook password -
修改配置
bash复制echo "c.NotebookApp.ip = '0.0.0.0'" >> ~/.jupyter/jupyter_notebook_config.py echo "c.NotebookApp.open_browser = False" >> ~/.jupyter/jupyter_notebook_config.py echo "c.NotebookApp.port = 8888" >> ~/.jupyter/jupyter_notebook_config.py -
启动Jupyter
bash复制
jupyter notebook
13. 多平台兼容性处理
13.1 处理路径差异
python复制from pathlib import Path
# 推荐方式
data_file = Path(__file__).parent / "data" / "file.txt"
# 替代os.path的方式
with open(data_file, "r") as f:
content = f.read()
13.2 处理行尾符差异
python复制# 读取文件时统一处理
with open("file.txt", "r", newline="") as f:
content = f.read()
13.3 处理编码问题
python复制# 显式指定编码
with open("file.txt", "r", encoding="utf-8") as f:
content = f.read()
14. 性能基准测试
14.1 使用timeit模块
python复制import timeit
setup = """
from math import sqrt
"""
code = """
def func():
return [sqrt(x) for x in range(100)]
"""
print(timeit.timeit(stmt=code, setup=setup, number=10000))
14.2 使用pytest-benchmark
bash复制pip install pytest-benchmark
测试用例:
python复制def test_square(benchmark):
result = benchmark(lambda: [x*x for x in range(1000)])
assert len(result) == 1000
运行测试:
bash复制pytest test_benchmark.py -v
15. 文档生成与维护
15.1 Sphinx文档生成
-
安装Sphinx
bash复制
pip install sphinx -
初始化文档项目
bash复制
sphinx-quickstart docs -
配置conf.py
python复制extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] -
生成API文档
bash复制
sphinx-apidoc -o docs/source mypackage make html
15.2 MkDocs配置
-
安装MkDocs
bash复制
pip install mkdocs mkdocs-material -
初始化项目
bash复制
mkdocs new myproject-docs -
启动本地服务器
bash复制
mkdocs serve -
构建静态站点
bash复制
mkdocs build
16. 代码质量与风格
16.1 预提交钩子配置
-
安装pre-commit
bash复制
pip install pre-commit -
创建配置文件.pre-commit-config.yaml
yaml复制repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - repo: https://github.com/psf/black rev: 22.6.0 hooks: - id: black - repo: https://github.com/PyCQA/isort rev: 5.10.1 hooks: - id: isort -
安装钩子
bash复制
pre-commit install
16.2 类型检查配置
-
安装mypy
bash复制
pip install mypy -
创建mypy.ini配置文件
ini复制[mypy] python_version = 3.10 warn_return_any = True warn_unused_configs = True disallow_untyped_defs = True -
运行类型检查
bash复制
mypy .
17. 项目打包与发布
17.1 使用setuptools打包
python复制# setup.py
from setuptools import setup, find_packages
setup(
name="mypackage",
version="0.1",
packages=find_packages(),
install_requires=[
'requests>=2.25.1',
],
entry_points={
'console_scripts': [
'mycli=mypackage.cli:main',
],
},
)
构建包:
bash复制python setup.py sdist bdist_wheel
17.2 发布到PyPI
-
安装twine
bash复制
pip install twine -
上传包
bash复制
twine upload dist/* -
测试安装
bash复制
pip install mypackage
18. 跨平台开发注意事项
18.1 文件系统差异
-
路径处理
- 总是使用
/作为路径分隔符 - 使用
os.path.normpath()规范化路径
- 总是使用
-
文件权限
- Linux有严格的权限系统
- Windows默认不区分用户权限
18.2 换行符处理
python复制# 写入文件时统一使用\n
with open("file.txt", "w", newline="\n") as f:
f.write("content\n")
18.3 编码问题
- 总是显式指定编码
- 考虑使用
chardet检测未知文件的编码
python复制import chardet
with open("unknown.txt", "rb") as f:
rawdata = f.read()
result = chardet.detect(rawdata)
encoding = result['encoding']
content = rawdata.decode(encoding)
19. 调试技巧与工具
19.1 高级调试技巧
-
事后调试
python复制import pdb def buggy_func(): try: # 问题代码 pass except: import pdb; pdb.post_mortem() -
远程调试
bash复制
python -m debugpy --listen 5678 --wait-for-client script.py然后在VS Code中附加调试器
19.2 日志配置最佳实践
python复制import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('app.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
20. 项目维护与升级
20.1 依赖更新策略
-
定期检查更新
bash复制
pip list --outdated -
安全更新
bash复制
pip install -U package_name -
大版本升级测试
- 创建单独的分支进行测试
- 使用tox测试多版本兼容性
20.2 弃用警告处理
python复制import warnings
def old_func():
warnings.warn(
"old_func is deprecated, use new_func instead",
DeprecationWarning,
stacklevel=2
)
# 旧实现
21. 团队协作规范
21.1 Git工作流建议
-
分支策略
- main:生产代码
- develop:集成分支
- feature/*:功能开发分支
- hotfix/*:紧急修复分支
-
提交信息规范
code复制类型(范围): 简短描述 详细描述(可选) 关联问题:#123类型可以是:feat, fix, docs, style, refactor, test, chore等
21.2 代码审查要点
-
功能实现
- 是否满足需求
- 是否有未处理的边界情况
-
代码质量
- 是否符合编码规范
- 是否有重复代码
- 函数是否过于复杂
-
测试覆盖
- 是否有足够的测试用例
- 关键路径是否被覆盖
22. 性能调优实战
22.1 识别性能瓶颈
-
使用cProfile
bash复制
python -m cProfile -o profile.out script.py -
分析结果
bash复制
python -m pstats profile.out
22.2 常见优化手段
-
减少全局查找
python复制# 优化前 def func(): for i in range(10000): math.sqrt(i) # 优化后 def func(): sqrt = math.sqrt for i in range(10000): sqrt(i) -
使用生成器
python复制# 优化前 def get_data(): return [x for x in range(1000000)] # 优化后 def get_data(): yield from range(1000000)
23. 异常处理最佳实践
23.1 异常处理原则
-
只捕获你能处理的异常
python复制try: # 可能失败的代码 except (ValueError, TypeError) as e: # 处理已知异常 logger.error(f"Invalid input: {e}") -
避免空except
python复制# 错误做法 try: do_something() except: pass # 正确做法 try: do_something() except SpecificError as e: handle_error(e)
23.2 自定义异常
python复制class MyAppError(Exception):
"""应用基础异常"""
pass
class InvalidInputError(MyAppError):
"""输入无效异常"""
pass
24. 测试策略与实施
24.1 测试金字塔
-
单元测试(最多)
- 测试单个函数/方法
- 使用unittest/pytest
-
集成测试
- 测试模块间交互
- 使用pytest + fixtures
-
端到端测试(最少)
- 测试完整流程
- 使用Selenium/Playwright
24.2 测试覆盖率目标
- 关键路径:100%
- 业务逻辑:>90%
- 工具函数:>80%
- 整体项目:>70%
使用pytest-cov测量:
bash复制pytest --cov=myproject tests/
25. 项目脚手架工具
25.1 使用cookiecutter
-
安装
bash复制
pip install cookiecutter -
创建项目
bash复制
cookiecutter gh:audreyr/cookiecutter-pypackage -
自定义模板
- 创建自己的cookiecutter模板
- 包含项目标准结构和配置
25.2 自定义脚手架脚本
python复制#!/usr/bin/env python
import argparse
from pathlib import Path
def create_project(name):
project_dir = Path(name)
project_dir.mkdir()
(project_dir / "README.md").write_text(f"# {name}\n\nProject description")
# 创建其他文件和目录...
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("name", help="Project name")
args = parser.parse_args()
create_project(args.name)
26. 国际化与本地化
26.1 gettext配置
-
提取消息
bash复制
xgettext -d messages -o locales/base.pot *.py -
创建翻译
bash复制
msginit -i locales/base.pot -o locales/zh_CN/LC_MESSAGES/messages.po -l zh_CN -
编译翻译
bash复制
msgfmt locales/zh_CN/LC_MESSAGES/messages.po -o locales/zh_CN/LC_MESSAGES/messages.mo
26.2 在代码中使用
python复制import gettext
zh = gettext.translation('messages', localedir='locales', languages=['zh_CN'])
zh.install()
_ = zh.gettext
print(_("Hello, world!"))
27. 异步编程实践
27.1 asyncio基础
python复制import asyncio
async def fetch_data(url):
# 模拟网络请求
await asyncio.sleep(1)
return f"Data from {url}"
async def main():
tasks = [
fetch_data("url1"),
fetch_data("url2"),
fetch_data("url3")
]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
27.2 异步HTTP客户端
python复制import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://example.com')
print(html)
asyncio.run(main())
28. 项目监控与告警
28.1 日志监控
-
使用ELK栈
- Filebeat收集日志
- Logstash处理日志
- Elasticsearch存储日志
- Kibana可视化
-
简单方案
bash复制tail -f app.log | grep --color -E "ERROR|WARN"
28.2 性能监控
- 使用Prometheus + Grafana
python复制from prometheus_client import start_http_server, Counter REQUEST_COUNT = Counter('app_requests_total', 'Total app requests') @app.route("/") def home(): REQUEST_COUNT.inc() return "Hello" if __name__ == '__main__': start_http_server(8000) app.run()
29. 微服务架构考虑
29.1 服务间通信
-
REST API
- 使用FastAPI或Flask
- OpenAPI/Swagger文档
-
gRPC
protobuf复制syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
29.2 服务发现
- Consul配置
python复制import consul c = consul.Consul() c.agent.service.register( 'my-service', service_id='my-service-1', address='127.0.0.1', port=8000 )
