σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academy学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python 学习路线›模块 1 · 面向量化的 Python 基础›主题 1.22·~35分钟入门

虚拟环境与 pip

路线进度模块 1/11 · 主题 22/33
1.22 虚拟环境与 pip
—实验得分— / 100总 XP—连续天数—

一个项目,一套库

项目需要 numpy、pandas 之类的第三方库,不同项目需要的版本又各不相同。把所有东西都装进同一个共享的 Python 会导致版本冲突:为一个项目升级会弄坏另一个。虚拟环境是一个私有文件夹,里面有自己的一份 Python 解释器和自己安装的库,因此每个项目都能拥有恰好需要的内容。pip 是从 Python 包索引(PyPI)下载库并安装到当前环境的工具。

# Create an environment in the project folder (once)
python -m venv .venv

# Activate it (every new terminal)
source .venv/bin/activate        # macOS and Linux
.venv\Scripts\activate           # Windows

# The prompt now shows (.venv); python and pip belong to it
python -c "import sys; print(sys.prefix)"

# Leave it
deactivate

用 pip 安装

环境激活后,pip install numpy 添加一个库,pip install numpy==1.26.4 固定精确版本,pip install -U numpy 升级,pip uninstall numpy 卸载。pip list 显示已安装的内容。拿不准时用 python -m pip 调用,这能保证它属于你将运行的同一个 Python。永远不要用 sudo pip,也不要装进系统 Python。

# Install, pin and inspect (environment active)
python -m pip install numpy pandas
python -m pip install "scipy>=1.11,<2"
python -m pip list

# Show one library
python -m pip show numpy

requirements.txt 与版本规则

依赖文件每行列出项目需要的一个库,这样任何人都能用 pip install -r requirements.txt 重建环境;pip freeze > requirements.txt 会写出当前安装的精确版本。每一行是库名加一个可选的版本限定符:==1.26.4(恰好)、>=2.0(至少)、<3(低于)、!=2.1(除此之外)、~=1.4.2(兼容:至少 1.4.2 但仍是 1.4.x)。以 # 开头的行是注释。版本按各部分作为数字比较,所以 1.10 比 1.9 新,而不是旧。

# A version is a tuple of numbers, not a string
print("1.10" > "1.9")               # False  (text order is wrong!)

def version_tuple(text):
    return tuple(int(part) for part in text.split("."))

print(version_tuple("1.10") > version_tuple("1.9"))   # True
print(version_tuple("2.0.1"))                         # (2, 0, 1)

# Reading one requirements line
line = "numpy>=1.26  # for arrays"
name_and_spec = line.split("#", 1)[0].strip()
print(name_and_spec)                                  # numpy>=1.26

让项目可复现的好习惯

每个项目创建一个环境,放在项目内并命名为 .venv,但不要提交它:它体积大,且只适用于你的机器。应提交 requirements.txt(或 pyproject.toml)。对需要的内容写宽松规则(>=),在必须复现结果时固定精确版本(==)。如果出了问题,随时可以删除 .venv,并用依赖文件在一分钟内重建。

# requirements.txt
numpy==1.26.4          # pinned: reproduce results exactly
pandas>=2.0            # at least 2.0
scipy~=1.11.0          # 1.11.x, but not 1.12
# plotting waits until we need it

# Rebuild the environment anywhere
python -m venv .venv
python -m pip install -r requirements.txt

# Record what is installed right now
python -m pip freeze > requirements.txt
先激活正确的环境pip 最常见的错误是装到了错误的 Python:安装成功,但运行代码时 import 失败。安装任何东西之前,先确认提示符显示 (.venv),并且 python -c "import sys; print(sys.prefix)" 指向你的项目内部。
  • python -m venv .venv 然后激活:每个项目一个环境。
  • python -m pip install name==version、pip install -r requirements.txt、pip freeze。
  • 限定符有 ==、>=、<、!=、~=;版本按数字元组比较;提交依赖文件,而不是 .venv。

下一节:Git 基础,跟踪代码的每一次改动,出问题时能够回退。

实验:评分内容

  • 用 parse_requirement 解析一行依赖25 分
  • 用 parse_requirements 解析整个依赖文件25 分
  • 用 version_tuple 让版本可以比较25 分
  • 用 satisfies 检查版本是否符合规则25 分
资源管理器 · lab-22-1
▾ lab-22-1
…
bash · 浏览器内
learner@quantcraft:~/lab-22-1$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

lab-22-1 中的所有内容将恢复为初始文件,终端也会被清空。你当前的解答将丢失,且无法撤销。

将被重置
  • main.py → 初始代码
  • 终端历史与测试输出
  • 未提交的更改
将被保留
  • 实验最高得分
  • 你的 XP 与连续天数
  • 讲解进度与笔记

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续