不使用虚拟环境
今天为了一个项目升级了某个包,明天另一个项目可能运行失败。出现问题后,很难判断到底是代码错了,还是包版本变了。更麻烦的是,很多“网上解决方案”会继续修改同一个公共环境,让问题越来越难追踪。
Python在金融中的应用 · 第一部分
很多 Python 初学问题不是语法问题,而是环境问题:包装到了哪里,Notebook 用的是哪个内核,终端里的 Python 和 IDE 里的 Python 是否一致。本节先把这些问题讲清楚。
可以把虚拟环境理解成“给每个项目一个独立工具箱”。刚开始学习时,可能会觉得创建环境、激活环境、选择内核很麻烦;但它解决的是一个很实际的问题:让“今天能运行的课程代码”,在下周、换电脑、交给同学或部署到服务器时仍然有机会运行。

像一间大家共用的工具房。一个项目升级了 pandas,另一个项目也会受到影响。
像给每个项目分配一个带锁的抽屉。课程项目、研究项目和量化项目各自保存自己的 Python 与依赖包。
今天为了一个项目升级了某个包,明天另一个项目可能运行失败。出现问题后,很难判断到底是代码错了,还是包版本变了。更麻烦的是,很多“网上解决方案”会继续修改同一个公共环境,让问题越来越难追踪。
每个项目的包放在自己的环境里。课程项目只安装课程需要的包,后续研究项目可以使用另一套环境。环境出了问题时,可以删除整个环境再重建,代码和数据不必跟着丢失。
把它想成安全带。平时可能感觉多了一步,但真正遇到版本冲突、换电脑或部署时,虚拟环境会让排查范围小很多。课程要求使用它,不是为了增加操作,而是为了训练可复现的工作习惯。
| 概念 | 简单理解 | 课程中的作用 |
|---|---|---|
| Python 解释器 | 真正执行 Python 代码的程序。 | Notebook 和 IDE 都需要选择一个解释器。 |
| 虚拟环境 | 项目自己的 Python 工具箱。 | 把课程需要的包和其他项目隔开。 |
| 依赖包 | 别人写好的工具库。 | 例如 numpy、pandas、matplotlib、seaborn、statsmodels。 |
| pip | Python 常用包安装工具。 | 用来安装课程依赖包。 |
| Jupyter kernel | Notebook 背后实际运行代码的环境。 | 如果 kernel 选错,可能出现“包已经安装但导入失败”。 |
下面以 `venv` 为例。命令不需要一次背下来,但要理解顺序:先进入项目文件夹,再创建环境,再激活环境,再安装包,最后让 Jupyter 能找到这个环境。
py -m venv .venv。如果电脑只有 python 命令,也可以使用 python -m venv .venv。.venv\\Scripts\\Activate.ps1。成功后命令行前面通常出现 (.venv)。python -m pip install notebook ipykernel numpy pandas matplotlib seaborn statsmodels scikit-learn openpyxl。python -m ipykernel install --user --name python-finance --display-name "Python Finance"。deactivate;确认已经退出且路径正确后删除:Remove-Item -Recurse -Force .venv。如果 PowerShell 提示禁止运行脚本,不要随意复制陌生的管理员命令。先保存完整提示,确认学校电脑的安全策略;也可以改用 cmd,激活命令为 .venv\\Scripts\\activate.bat。
cd ~/python-finance-course。python3 -m venv .venv。source .venv/bin/activate。成功后命令行前面通常出现 (.venv)。python -m pip install notebook ipykernel numpy pandas matplotlib seaborn statsmodels scikit-learn openpyxl。python -m ipykernel install --user --name python-finance --display-name "Python Finance"。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 环境管理文档。
环境变量是系统层面的配置信息。对于初学者,先理解两个用途:一是让系统知道去哪里找工具,二是保存不适合写进代码的配置。

终端输入 `python`、`pip`、`git` 后,系统会根据 PATH 去找对应程序。如果 PATH 配错,就会出现“命令找不到”。
数据库地址、API 地址、课程服务器账号等配置可以放在本机环境或 `.env` 文件中。真实密码不要写进网页、截图或公开仓库。
OPENAI_API_KEY 或 TIANCHI_PROJECT,变量值填写真实内容。编辑 PATH 时应新增一条目录,不要删除已有的系统路径。保存后要重新打开 PowerShell、Trae 或 Jupyter,旧进程不会自动获得新变量。$env:COURSE_MODE = "practice"
$env:COURSE_MODE
Remove-Item Env:COURSE_MODE
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)
os.environ["COURSE_MODE"] = "debug" 只改变当前 Python 进程及其子进程;它不会替你修改 Windows 的永久用户变量。永久修改仍应回到“环境变量”窗口,或使用 Microsoft 文档中说明的用户 / 系统范围设置。printenv 查看全部变量,输入 echo $PATH 查看 PATH。macOS 默认使用 zsh,变量名区分大小写。export COURSE_MODE="practice"
echo $COURSE_MODE
unset COURSE_MODE
关闭这个终端窗口后,临时变量通常就不存在了。nano ~/.zshrc,在文件末尾加入例如 export COURSE_MODE="practice",保存后执行 source ~/.zshrc。也可以关闭终端并重新打开。不要把真正的 API Key 粘贴到课堂截图或共享文件中。~/.zshrc,应用可能仍看不到新变量,此时需要完全退出并重新打开应用。os.environ["COURSE_MODE"] = "debug" 只对当前 Python 进程有效。程序结束后不会自动写回 ~/.zshrc,这正是它比较安全的地方。# .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 的常见使用方式。
# 当前终端使用哪个 Python
which python
# Python 版本
python --version
# 当前环境安装了哪些包
pip list
# 在 Notebook 中检查当前 Python
import sys
print(sys.executable)
如果终端里能导入 pandas,但 Notebook 里不能导入,通常不是 pandas 突然坏了,而是 Notebook 选择了另一个 kernel。先检查 `sys.executable`,看它是不是课程虚拟环境中的 Python。
不要一看到报错就复制网上的安装命令反复运行。先确认当前环境,再决定是否安装或切换内核。
现在很多人会用 Python 调用大语言模型、运行本地推理服务或部署一个金融问答程序。这些任务通常比普通数据分析需要更多依赖:模型库、向量数据库、Web 服务、GPU 驱动和特定版本的深度学习框架。虚拟环境正是把这些依赖分开管理的第一步。
隔离同一台电脑里的 Python 包和版本。适合课程练习、数据分析项目和小型 API 程序。
把程序、Python、系统库和启动方式一起装进一个“可搬运的盒子”。常见工具是 Docker。
可能还需要模型权重、CUDA / GPU、显存、端口和服务配置。环境越复杂,越需要清楚地记录依赖。
在 .venv 中安装 transformers、pandas、fastapi 等包,先用小模型或 API 完成测试。
把依赖清单、代码和配置交给服务器或容器,确保线上使用的版本与本地测试一致。
容器能够解决更多层次的问题,但也会引入镜像、端口、挂载目录、网络和权限等新概念。先掌握“环境隔离、依赖安装、内核选择和安全配置”,以后再学习 Docker,会更容易理解每一层到底在解决什么问题。
requirements.txt 或 environment.yml。虚拟环境不能替代数据安全、访问控制和模型许可审查。部署大语言模型时,仍然要检查模型许可、训练数据来源、日志中的敏感信息,以及 API Key 是否可能被提交或打印。
用“工具箱”的比喻说明为什么每个项目最好有自己的虚拟环境。
在终端和 Notebook 中分别查看当前 Python 路径,比较二者是否一致。
在课程环境中安装 numpy、pandas、matplotlib,并在 Notebook 中成功导入。
说明为什么不能把数据库密码写进 Notebook、网页或公开仓库。