2. Python环境搭建与依赖库

地震道读取与SEG-Y批量处理属于典型的“科学计算 + 二进制文件解析”任务,环境搭建的质量直接决定后续代码能否跑通、结果是否可信。本节的目标不是简单地把几个库装上,而是建立一个可复现、可验证、版本可控的Python工作环境,并通过一段最小可运行代码确认NumPy、ObsPy、segpy三个库各自的核心能力都正常。下面按“解释器选择—虚拟环境—依赖安装—功能验证”的顺序展开,其中穿插实际会遇到的坑与判断依据。

一、解释器与虚拟环境:先把地基打稳

建议使用Python 3.9~3.11之间的64位版本。原因很实际:ObsPy对较新的Python版本支持存在滞后,而segpy是一个维护活跃度较低的老库,在3.12及以上版本中可能出现依赖解析失败。安装时务必勾选“Add Python to PATH”,安装完成后在终端确认:

python --version
# 期望输出类似:Python 3.11.7
python -c "import sys; print(sys.maxsize > 2**32)"
# 输出 True 表示是64位解释器,处理大SEG-Y文件时不会受内存寻址限制

不要在系统全局环境里直接pip install。正确做法是为本课程单独建一个虚拟环境,这样即使后续装坏了某个库,删掉目录重建即可,不会污染其他项目。以Windows为例:

python -m venv segy_env
segy_env\Scripts\activate
# macOS / Linux 下为:source segy_env/bin/activate
python -m pip install --upgrade pip

激活后命令行前缀会出现(segy_env),这是判断“当前操作是否落在虚拟环境内”的最直接标志。后续所有安装与运行都必须在这个已激活的终端里进行。

二、依赖库的安装与各自职责

三个库分工明确,不能互相替代:NumPy负责把SEG-Y中的道数据解析为多维数组并做向量化运算;ObsPy提供成熟的read()接口、头段字段映射与地震学单位换算,适合单文件读取与格式校验;segpy则偏向底层,能直接操作SEG-Y的文本头、二进制头与道头,适合批量改写、字段级修补等场景。安装命令如下:

pip install numpy obspy segpy

如果网络较慢,可加国内镜像源,例如-i https://pypi.tuna.tsinghua.edu.cn/simple。安装完成后用pip list记录版本,建议把结果写入requirements.txt以便复现:

pip freeze > requirements.txt
ObsPy在部分平台上会连带安装SciPy、matplotlib等依赖,首次安装耗时较长属正常现象。若安装segpy时报“setup.py相关错误”,通常是setuptools版本过新导致,可先执行pip install "setuptools<70"再重试。

三、功能验证:用一段代码同时检验三个库

装完不等于能用。下面这段验证脚本分别调用三个库的核心接口,并打印可判断的结果。其中构造的SEG-Y参数(采样间隔2 ms、100道、每道1000个采样点)属于教学示例,用于验证读写链路是否通畅,不代表任何实际工区数据。

import numpy as np
import obspy
import segpy
from segpy.writer import write_segy
from segpy.reader import create_reader

# 1) NumPy:数组运算能力
arr = np.arange(1000, dtype=np.float32).reshape(100, 10)
print("NumPy:", arr.shape, arr.mean())

# 2) segpy:写一个最小SEG-Y再读回,验证头段与道数据
#    此处省略完整头段构造,重点观察能否成功创建reader并取到道数
# 3) ObsPy:读取同一文件并检查stats
st = obspy.read("demo.sgy")
print("ObsPy traces:", len(st), "dt(s):", st[0].stats.delta)

判断标准很明确:NumPy那行应输出(100, 10)和一个均值;ObsPy应能报出道数与采样间隔(2 ms对应0.002);segpy能成功创建reader并读到道头字段。三者都通过,说明环境可用。若ObsPy报“Unknown format”,多半是文件扩展名或头段不规范,可先用obspy.read(..., format="SEGY")强制指定格式再试。

Python地震道处理环境:依赖分工与验证链路 Python 3.9–3.11 (64位) venv 虚拟环境隔离 NumPy 多维数组 / 向量化运算 ObsPy read() / 头段映射 / 单位 segpy 底层头段读写 最小验证脚本 verify_env.py import numpy / obspy / segpy → 构造示例SEG-Y → 读回检查 示例参数:dt=2 ms,100道,每道1000采样点 通过 形状/道数/dt 均符合预期 不通过 Unknown format / 导入报错 指定 format="SEGY" 重试 或检查 setuptools 版本

四、常见问题与判断依据

环境搭建阶段的高频问题集中在三类。第一类是导入失败:ModuleNotFoundError通常意味着当前终端没有激活虚拟环境,或pip与python指向了不同解释器,可用where python与where pip核对路径是否同源。第二类是版本冲突:ObsPy与NumPy存在版本匹配要求,若出现numpy.dtype size changed一类报错,说明二进制接口不兼容,应统一在虚拟环境内重装而非单独升级某一个库。第三类是读写结果异常:读出的道数为0或采样间隔为0,往往是SEG-Y头段字段不符合规范,此时用segpy直接打印二进制头中的采样间隔字段,与ObsPy读到的stats.delta交叉比对,就能定位是文件问题还是解析问题。

最后给出一个可直接执行的检查清单,作为本节的可交付成果:解释器为64位且版本在3.9~3.11之间;虚拟环境已激活且pip list中三个库版本齐全;requirements.txt已生成;验证脚本能打印出数组形状、道数与采样间隔三项结果;三项结果与示例参数一致。全部满足即可进入下一阶段的真实SEG-Y文件读取与批量处理。