# Python 环境隔离与代码检查

项目依赖应放在虚拟环境中，避免替换发行版自带的 Python。系统工具可能依赖系统解释器，强行升级会影响包管理。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/python/

## 1. 保留系统 Python，给项目单独建环境

Linux 的包管理器和系统工具可能依赖自带 Python。不要把 `/usr/bin/python3` 替换成网上下载的版本，也不要用 `sudo pip install` 把应用依赖混进系统环境。一个项目一个虚拟环境，升级和删除都更清楚。

```bash
python3 --version
command -v python3
cat /etc/os-release
```

项目若要求特定版本，先核对官方支持，再使用发行版支持的包、独立安装路径或容器。虚拟环境隔离依赖，但不等同于安全沙箱。

## 2. 创建虚拟环境并确认解释器

Ubuntu/Debian 可先安装发行版提供的 venv 组件。下面在普通用户目录创建示例项目，目录名可调整。

```bash
sudo apt update
sudo apt install python3-venv
mkdir -p "$HOME/my-python-app"
cd "$HOME/my-python-app"
python3 -m venv .venv
source .venv/bin/activate
python -c 'import sys; print(sys.executable)'
python -m pip --version
```

解释器路径应指向当前项目的 `.venv`。看到 externally-managed-environment 时，优先检查是否忘记进入虚拟环境，不要直接使用破坏系统包保护的选项。

## 3. 安装项目依赖并锁定版本

已有项目先阅读 pyproject.toml、requirements.txt 与锁文件，使用项目指定工具。普通 requirements 项目可运行：

```bash
python -m pip install -r requirements.txt
python -m pip check
```

文件不存在时先建立自己的依赖清单，不要复制别人的完整环境。只从受信任来源安装包，核对名称，防止装错同名或拼写相近包。版本锁定帮助重现环境，但仍需定期更新安全补丁。

## 4. 用 Pylint 找问题，再运行实际测试

```bash
python -m pip install pylint
python -m pylint app.py
python -m compileall -q app.py
```

把 app.py 换成自己的文件。Pylint 的命名、风格和静态分析提示需要结合项目判断，不能为了分数把所有提示关闭。compileall 能发现部分语法错误，但不能证明数据库、网络和业务逻辑正确。

涉及网络调用时配置超时和错误处理，API Key 从受限环境配置读取，不写进脚本和日志。调试完成再运行项目自己的测试或一条真实但低影响的业务流程。

## 5. 长期运行使用明确路径

systemd 中的 ExecStart 指向 `/实际/项目/.venv/bin/python`，WorkingDirectory 指向项目目录，使用普通服务用户。不要依赖交互 shell 中的 `source activate`，定时任务和服务不会自动继承你的终端环境。

Conda 适合需要它管理复杂科学计算依赖的项目；创建独立环境并记录配置即可，不必为了一个简单脚本安装整套大型发行版。虚拟环境通常重建比跨机器复制更可靠。

部署方法见[后台服务](https://stock.iftalking.com/guides/persistent-jobs/)，依赖升级后再检查启动、日志与实际产物。


## 完成后检查

退出再重新激活环境，确认程序使用的解释器与 pip 属于同一环境。

## 参考资料

- [docs.python.org · 项目文档](https://docs.python.org/3/tutorial/venv.html)
