Python在金融中的应用 · 第一部分

第三节:虚拟环境、环境变量与依赖包

很多 Python 初学问题不是语法问题,而是环境问题:包装到了哪里,Notebook 用的是哪个内核,终端里的 Python 和 IDE 里的 Python 是否一致。本节先把这些问题讲清楚。

1. 为什么需要虚拟环境

可以把虚拟环境理解成“给每个项目一个独立工具箱”。刚开始学习时,可能会觉得创建环境、激活环境、选择内核很麻烦;但它解决的是一个很实际的问题:让“今天能运行的课程代码”,在下周、换电脑、交给同学或部署到服务器时仍然有机会运行。

虚拟环境给每个项目一个独立工具箱
虚拟环境:给每个项目一个独立工具箱
电脑上的公共 Python

像一间大家共用的工具房。一个项目升级了 pandas,另一个项目也会受到影响。

项目自己的 .venv

像给每个项目分配一个带锁的抽屉。课程项目、研究项目和量化项目各自保存自己的 Python 与依赖包。

不使用虚拟环境

今天为了一个项目升级了某个包,明天另一个项目可能运行失败。出现问题后,很难判断到底是代码错了,还是包版本变了。更麻烦的是,很多“网上解决方案”会继续修改同一个公共环境,让问题越来越难追踪。

使用虚拟环境

每个项目的包放在自己的环境里。课程项目只安装课程需要的包,后续研究项目可以使用另一套环境。环境出了问题时,可以删除整个环境再重建,代码和数据不必跟着丢失。

把它想成安全带。平时可能感觉多了一步,但真正遇到版本冲突、换电脑或部署时,虚拟环境会让排查范围小很多。课程要求使用它,不是为了增加操作,而是为了训练可复现的工作习惯。

2. 先理解几个词

概念简单理解课程中的作用
Python 解释器真正执行 Python 代码的程序。Notebook 和 IDE 都需要选择一个解释器。
虚拟环境项目自己的 Python 工具箱。把课程需要的包和其他项目隔开。
依赖包别人写好的工具库。例如 numpy、pandas、matplotlib、seaborn、statsmodels。
pipPython 常用包安装工具。用来安装课程依赖包。
Jupyter kernelNotebook 背后实际运行代码的环境。如果 kernel 选错,可能出现“包已经安装但导入失败”。

3. 推荐的课程环境创建流程

下面以 `venv` 为例。命令不需要一次背下来,但要理解顺序:先进入项目文件夹,再创建环境,再激活环境,再安装包,最后让 Jupyter 能找到这个环境。

Windows PowerShell:从创建到删除

  1. 打开 PowerShell 或 Trae 终端,进入课程文件夹。
  2. 创建环境:py -m venv .venv。如果电脑只有 python 命令,也可以使用 python -m venv .venv。
  3. 激活环境:.venv\\Scripts\\Activate.ps1。成功后命令行前面通常出现 (.venv)。
  4. 安装依赖:python -m pip install notebook ipykernel numpy pandas matplotlib seaborn statsmodels scikit-learn openpyxl。
  5. 注册 Notebook 内核:python -m ipykernel install --user --name python-finance --display-name "Python Finance"。
  6. 退出环境:deactivate;确认已经退出且路径正确后删除:Remove-Item -Recurse -Force .venv。

如果 PowerShell 提示禁止运行脚本,不要随意复制陌生的管理员命令。先保存完整提示,确认学校电脑的安全策略;也可以改用 cmd,激活命令为 .venv\\Scripts\\activate.bat。

macOS:从创建到删除

  1. 打开“终端”或 Trae 终端,进入课程文件夹:cd ~/python-finance-course。
  2. 创建环境:python3 -m venv .venv。
  3. 激活环境:source .venv/bin/activate。成功后命令行前面通常出现 (.venv)。
  4. 安装依赖:python -m pip install notebook ipykernel numpy pandas matplotlib seaborn statsmodels scikit-learn openpyxl。
  5. 注册 Notebook 内核:python -m ipykernel install --user --name python-finance --display-name "Python Finance"。
  6. 退出环境:deactivate;确认已经退出且路径正确后删除:rm -rf .venv。

如果电脑同时安装了多个 Python,优先使用激活环境后的 python -m pip,不要单独输入一个不确定的 pip。这样可以确保包安装到当前环境。

# 1. 进入课程项目文件夹
cd python-finance-course

# 2. 创建虚拟环境
python -m venv .venv

# 3. 激活环境
# macOS / Linux
source .venv/bin/activate

# Windows PowerShell
.venv\\Scripts\\Activate.ps1

# 4. 安装课程常用包
pip install notebook ipykernel numpy pandas matplotlib seaborn statsmodels scikit-learn openpyxl

# 5. 把这个环境注册为 Notebook 内核
python -m ipykernel install --user --name python-finance --display-name \"Python Finance\"

本课程使用 Notebook,因此安装 `notebook` 和 `ipykernel` 很重要。打开 `.ipynb` 后,要选择 `Python Finance` 这个内核,代码才会使用刚刚创建的环境。

官方参考:Python venv 文档;如果使用 conda,可参考 conda 环境管理文档。

4. 环境变量是什么

环境变量是系统层面的配置信息。对于初学者,先理解两个用途:一是让系统知道去哪里找工具,二是保存不适合写进代码的配置。

环境变量让系统知道去哪里找工具
环境变量:让系统知道去哪里找工具

PATH

终端输入 `python`、`pip`、`git` 后,系统会根据 PATH 去找对应程序。如果 PATH 配错,就会出现“命令找不到”。

项目配置

数据库地址、API 地址、课程服务器账号等配置可以放在本机环境或 `.env` 文件中。真实密码不要写进网页、截图或公开仓库。

4.1 Windows:找到、编辑和使用环境变量

  1. 通过图形界面查看。在开始菜单搜索“编辑系统环境变量”,打开“系统属性”,点击“高级” → “环境变量”。上半部分是当前用户变量,下半部分是系统变量。初学时优先使用“用户变量”,避免影响电脑上的其他用户。
  2. 添加或编辑。在“用户变量”中点击“新建”,变量名例如 OPENAI_API_KEY 或 TIANCHI_PROJECT,变量值填写真实内容。编辑 PATH 时应新增一条目录,不要删除已有的系统路径。保存后要重新打开 PowerShell、Trae 或 Jupyter,旧进程不会自动获得新变量。
  3. 只在当前 PowerShell 临时设置。这适合课堂测试,关闭窗口后变量就消失:
    $env:COURSE_MODE = "practice"
    $env:COURSE_MODE
    Remove-Item Env:COURSE_MODE
  4. 用 Python 读取。Python 只能读取当前进程已经继承到的变量:
    import os
    
    course_mode = os.getenv("COURSE_MODE", "not-set")
    api_key = os.getenv("OPENAI_API_KEY")
    
    print(course_mode)
    print("API Key 是否存在:", bool(api_key))
    # 不要 print(api_key)
  5. 理解“更改”的范围。os.environ["COURSE_MODE"] = "debug" 只改变当前 Python 进程及其子进程;它不会替你修改 Windows 的永久用户变量。永久修改仍应回到“环境变量”窗口,或使用 Microsoft 文档中说明的用户 / 系统范围设置。

4.2 macOS:找到、编辑和使用环境变量

  1. 查看当前终端变量。打开“终端”,输入 printenv 查看全部变量,输入 echo $PATH 查看 PATH。macOS 默认使用 zsh,变量名区分大小写。
  2. 临时设置。当前终端中输入:
    export COURSE_MODE="practice"
    echo $COURSE_MODE
    unset COURSE_MODE
    关闭这个终端窗口后,临时变量通常就不存在了。
  3. 持久设置。在终端输入 nano ~/.zshrc,在文件末尾加入例如 export COURSE_MODE="practice",保存后执行 source ~/.zshrc。也可以关闭终端并重新打开。不要把真正的 API Key 粘贴到课堂截图或共享文件中。
  4. 给 Python 使用。在同一个终端启动 Trae 或 Jupyter,Python 就能读取该终端继承的变量;如果先打开了 GUI 应用,再修改 ~/.zshrc,应用可能仍看不到新变量,此时需要完全退出并重新打开应用。
  5. 用 Python 更改。os.environ["COURSE_MODE"] = "debug" 只对当前 Python 进程有效。程序结束后不会自动写回 ~/.zshrc,这正是它比较安全的地方。

本地 `.env` 文件怎么用

# .env(只保存在自己的电脑)
COURSE_MODE=practice
OPENAI_API_KEY=replace-with-your-key
# Python
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
print("API Key 是否存在:", bool(api_key))

先在当前虚拟环境安装 python-dotenv。.env 是方便管理本地配置的文本文件,不是保险箱;仍然必须加入 .gitignore,并且不能上传到 OSS 或公开仓库。

把秘密和普通配置分开

# .gitignore
.env
.venv/
__pycache__/
*.ipynb_checkpoints/

如果 API Key 曾经误提交到 Git,不能只删除代码中的那一行就认为安全。应立即到对应服务后台撤销旧 Key、重新生成新 Key,并检查 Git 历史。

Windows 的用户变量、系统变量和当前进程范围,以及 PowerShell 的 $Env: 用法,可参考 Microsoft Learn:about Environment Variables。macOS 的命令行示例遵循 zsh 的常见使用方式。

5. 遇到问题先检查这些

# 当前终端使用哪个 Python
which python

# Python 版本
python --version

# 当前环境安装了哪些包
pip list

# 在 Notebook 中检查当前 Python
import sys
print(sys.executable)

如果终端里能导入 pandas,但 Notebook 里不能导入,通常不是 pandas 突然坏了,而是 Notebook 选择了另一个 kernel。先检查 `sys.executable`,看它是不是课程虚拟环境中的 Python。

不要一看到报错就复制网上的安装命令反复运行。先确认当前环境,再决定是否安装或切换内核。

6. 虚拟环境、容器与大语言模型部署

现在很多人会用 Python 调用大语言模型、运行本地推理服务或部署一个金融问答程序。这些任务通常比普通数据分析需要更多依赖:模型库、向量数据库、Web 服务、GPU 驱动和特定版本的深度学习框架。虚拟环境正是把这些依赖分开管理的第一步。

虚拟环境

隔离同一台电脑里的 Python 包和版本。适合课程练习、数据分析项目和小型 API 程序。

容器

把程序、Python、系统库和启动方式一起装进一个“可搬运的盒子”。常见工具是 Docker。

大语言模型服务

可能还需要模型权重、CUDA / GPU、显存、端口和服务配置。环境越复杂,越需要清楚地记录依赖。

本地开发

在 .venv 中安装 transformers、pandas、fastapi 等包,先用小模型或 API 完成测试。

部署环境

把依赖清单、代码和配置交给服务器或容器,确保线上使用的版本与本地测试一致。

为什么不一开始就学容器

容器能够解决更多层次的问题,但也会引入镜像、端口、挂载目录、网络和权限等新概念。先掌握“环境隔离、依赖安装、内核选择和安全配置”,以后再学习 Docker,会更容易理解每一层到底在解决什么问题。

一个小型模型项目应记录什么

  • Python 版本与虚拟环境名称。
  • requirements.txt 或 environment.yml。
  • 模型名称、版本、来源与许可。
  • GPU / CPU、显存、端口和启动命令。
  • API Key 等秘密的存放方式,而不是秘密本身。

虚拟环境不能替代数据安全、访问控制和模型许可审查。部署大语言模型时,仍然要检查模型许可、训练数据来源、日志中的敏感信息,以及 API Key 是否可能被提交或打印。

7. 本节练习

练习 A:解释虚拟环境

用“工具箱”的比喻说明为什么每个项目最好有自己的虚拟环境。

练习 B:检查当前 Python

在终端和 Notebook 中分别查看当前 Python 路径,比较二者是否一致。

练习 C:安装课程包

在课程环境中安装 numpy、pandas、matplotlib,并在 Notebook 中成功导入。

练习 D:写一条安全规则

说明为什么不能把数据库密码写进 Notebook、网页或公开仓库。