پژوهش و توسعه/محیط اجرا و نصب
SPM GEO / RESEARCH

محیط اجرا و نصب؛ از انتخاب نسخه تا آزمون پذیرش

راهنمای مرحله‌به‌مرحله نصب SNAP و GECORIS، جداسازی محیط قدیمی و جدید، اتصال Python، کنترل داده، رفع خطا و ثبت محیط قابل بازتولید.

راهنمای فنی · بازبینی ۱۵ اکتبر ۲۰۲۶ مشاهده پرونده پایلوت ←
فهرست این صفحه

۱. انتخاب مسیر نصب و مرز سازگاری

این راهنما دو مسیر مستقل دارد: بازتولید محیط تاریخی GECORIS و ارزیابی محیط جدید SNAP. در مستندات GECORIS 0.1 ترکیب Python 3.6 و SNAP 8 معرفی شده است [۱]. محیط جدید تا زمان اجرای آزمون‌های GECORIS و مقایسه خروجی، صرفاً محیط آزمایشی است؛ تغییر نام import، مهاجرت کامل نرم‌افزار محسوب نمی‌شود.

در بازبینی ۱۵ اکتبر ۲۰۲۶، نسخه ارائه‌شده در صفحه رسمی دانلود SNAP، نسخه 14.0.0 است [۲]. راهنمای رابط نسخه ۱۲ به بعد Python 3.9 تا 3.13 را پوشش می‌دهد [۳]. شماره نسخه جاری را هنگام نصب دوباره از منبع رسمی بررسی کنید. هیچ‌یک از این ترکیب‌ها در این صفحه به‌عنوان پایلوت اجراشده SPM GEO معرفی نمی‌شود.

مسیرترکیب مبناشرط استفاده
بازتولید تاریخیSNAP 8 / Python 3.6 / snappyمحیط قدیمی مجزا؛ بسته‌ها و خروجی مرجع ثبت شوند
آزمایش رابط جدیدSNAP 12+ / Python 3.9–3.13 / esa_snappyانتخاب نمونه این راهنما: Python 3.11؛ سازگاری GECORIS احراز نشده
محیط عملیاتی پروژهترکیبی که واقعاً آزموده شدهثبت نسخه دقیق، داده آزمون، خروجی و معیار پذیرش

۲. اجزای محیط و ترتیب راه‌اندازی

زنجیره اجرایی از سیستم‌عامل و فضای ذخیره‌سازی شروع می‌شود؛ سپس SNAP و ابزار خط فرمان GPT، محیط Python، رابط Java/Python، کد GECORIS و در پایان داده‌ها و سرویس‌های جانبی قرار دارند. موفقیت هر لایه باید مستقل ثبت شود تا خطای داده با خطای نصب اشتباه نشود.

  1. مسیر و نسخه‌ها را انتخاب و پرونده محیط را ایجاد کنید.
  2. SNAP و ابزارهای راداری را نصب؛ GUI و GPT را بررسی کنید.
  3. محیط Python را بسازید و مسیر واقعی مفسر را ثبت کنید.
  4. رابط مناسب همان نسل SNAP را پیکربندی کنید.
  5. کد GECORIS و وابستگی‌های همان commit را بررسی کنید.
  6. محصول نمونه را بخوانید؛ سپس آزمون کوچک پردازشی و مقایسه خروجی را اجرا کنید.
  7. پس از قبولی، محیط را ثابت و مدارک بازتولید را بایگانی کنید.

۳. سیستم‌عامل، معماری و جداسازی

برای مسیر تاریخی، مستندات GECORIS آزمون روی GNU/Linux و آزمون جزئی روی Windows 10 را گزارش می‌کنند [۱]. این عبارت تأیید همه نسخه‌های ویندوز، WSL یا macOS نیست. معماری Python، Java، jpy و سیستم‌عامل باید سازگار باشد؛ فایل باینری یک معماری را به معماری دیگر کپی نکنید.

در WSL، Python و SNAP را هر دو در همان محیط Linux نصب کنید و برای کار سنگین، داده موقت را روی فایل‌سیستم Linux نگه دارید. اتصال Python ویندوز به کتابخانه Java لینوکس یک مسیر معتبر نصب نیست. در VM، دیسک و RAM واقعی اختصاص‌یافته را مبنای ظرفیت قرار دهید.

محیط‌های Conda، تمام تنظیمات SNAP را جدا نمی‌کنند؛ پوشه تنظیمات کاربر و cache ممکن است مشترک بماند. برای مقایسه نسل قدیمی و جدید، VM یا حساب کاربری مجزا انتخاب مطمئن‌تری است. قبل از تغییر نسخه، تنظیمات و snapshot محیط قبلی را نگه دارید.

۴. سخت‌افزار و برآورد ظرفیت

اعداد زیر نقطه شروع برنامه‌ریزی‌اند و حداقل رسمی یا تضمین عملکرد نیستند. اندازه AOI، تعداد burstها، تعداد برداشت‌ها، تعداد جفت‌ها، فرمت خروجی و هم‌زمانی کارها تعیین‌کننده‌اند. پیش از پردازش کل آرشیو، مصرف یک نمونه نماینده را اندازه بگیرید.

  • حجم مورد نیاز = ورودی‌ها + خروجی‌های میانی نگه‌داشته‌شده + نتایج + cache/temp + فضای احتیاطی. ضریب ثابت برای همه پروژه‌ها معتبر نیست.
  • برای نمونه، حجم هر مرحله را اندازه بگیرید و بر تعداد برداشت‌ها یا جفت‌های همان مرحله مقیاس کنید؛ همه مراحل با تعداد تصاویر مقیاس یکسان ندارند.
  • فضای آزاد، quota و inode را کنترل کنید. انتقال به دیسک شبکه یا پوشه همگام‌شونده ممکن است گلوگاه ایجاد کند.
منبعپایلوت کوچکپردازش سری زمانی
RAMحدود ۱۶ GB؛ با محدودیت هم‌زمانیحدود ۳۲–۶۴ GB یا بیشتر بر اساس اندازه‌گیری
CPUحدود ۴ هستهحدود ۸–۱۶ هسته؛ افزایش هسته الزاماً افزایش خطی سرعت نیست
دیسکحدود ۱۰۰ GB آزاد برای نمونه محدودحدود ۵۰۰ GB تا چند TB؛ برآورد از حجم واقعی میانی‌ها
ذخیره‌سازیSSD برای فضای کارNVMe برای scratch و آرشیو جداگانه
GPUدر این مسیر پیش‌فرض الزام نیستتنها در صورت پشتیبانی صریح ابزار انتخاب‌شده

۵. ساختار پوشه‌ها و سیاست فایل

یک ریشه کوتاه و قابل نوشتن مانند /data/spmgeo یا D:\spmgeo انتخاب کنید. برای سازگاری ابزارهای قدیمی، در مسیر کار از نام‌های ساده لاتین استفاده کنید. ورودی اصلی را از فایل موقت جدا و برای هر اجرای پردازش یک شناسه مستقل تعریف کنید.

پوشهمحتواقاعده
software/کد و مشخصات نسخهکد را داخل آرشیو داده خام نگذارید
input/slc/محصول اصلی و manifestداده اصلی دست‌نخورده و دارای checksum
aux/orbit/، aux/dem/، aux/atmo/مدار، DEM، ERA5 و IONEXمنبع، نسخه، پوشش زمانی و checksum ثبت شود
config/پارامترها و graphهابدون رمز یا توکن؛ نسخه‌بندی شود
work/<run-id>/فایل‌های میانی و tempقابل بازسازی؛ حذف فقط بعد از کنترل خروجی
results/<run-id>/خروجی پذیرفته‌شدهبه ورودی و تنظیمات همان اجرا متصل باشد
logs/ و provenance/لاگ و مشخصات محیطخطاها، نسخه‌ها و معیار پذیرش ثبت شوند

۶. کنترل پیش از نصب

نصب‌کننده SNAP، توزیع Conda و Git را از منبع رسمی دریافت کنید. checksum فایل نصب را با مقدار منتشرشده همان نسخه مقایسه کنید. نوع سیستم‌عامل، معماری، دسترسی نوشتن، فضای دیسک، اتصال شبکه و ساعت سیستم را پیش از نصب کنترل کنید.

فرمان‌های این صفحه نمونه اجرایی‌اند؛ مسیرهای /opt/esa-snap و C:\Tools\esa-snap را با مسیر واقعی خود جایگزین کنید. Bash و PowerShell دو پوسته متفاوت‌اند؛ فرمان‌های یکی را بدون تبدیل در دیگری وارد نکنید. برای نصب بسته‌های Python از محیط اختصاصی و python -m pip استفاده کنید.

  • از نصب هم‌زمان چند تغییر عمده خودداری کنید؛ ابتدا نسخه پایه را ثبت کنید.
  • در شبکه سازمانی، proxy و گواهی CA را مطابق سیاست شبکه تنظیم کنید؛ اعتبارسنجی TLS را خاموش نکنید.
  • اگر دسترسی آفلاین لازم است، نصب‌کننده‌ها، بسته‌های متناظر سیستم‌عامل و داده‌های کمکی را پیشاپیش تهیه و در یک ماشین مشابه آزمایش کنید.
  • در صورت کمبود مجوز، مسیر قابل نوشتن انتخاب کنید؛ اجرای دائمی پردازش با root یا Administrator لازم نیست.

۷. نصب SNAP و کنترل ابزارهای راداری

از صفحه رسمی STEP بسته مناسب سیستم‌عامل را انتخاب کنید. در انتشار جاری، Sentinel Toolboxes شامل ابزارهای Microwave و Optical است؛ بسته صرفاً SMOS برای این گردش کار کافی نیست [۲]. در نصب سفارشی مطمئن شوید اجزای راداری حذف نشده‌اند.

پس از نصب، SNAP Desktop را باز کنید؛ نسخه برنامه و افزونه‌ها را ثبت و یک SLC نمونه را در GUI باز کنید. مسیر gpt و snappy-conf را در پوشه bin بیابید. ESA SNAP با مدیر بسته Ubuntu snap متفاوت است؛ نصب بسته‌ای با نام مشابه، نصب ابزار پردازش ESA محسوب نمی‌شود.

از Java همراه نصب‌کننده شروع کنید. تغییر JAVA_HOME یا جایگزینی JRE بدون بررسی نسخه مورد انتظار SNAP می‌تواند پل Python را از کار بیندازد. نسخه Java استفاده‌شده توسط SNAP را از تنظیمات یا لاگ همان برنامه ثبت کنید؛ java -version در ترمینال الزاماً همان Java نیست.

bash
# Linux / Bash: replace the installation path first
/opt/esa-snap/bin/gpt -h
# Save the help output and inspect available SAR operators.
/opt/esa-snap/bin/gpt -h > gpt-help.txt 2>&1

۸. ایجاد محیط Python برای ارزیابی مسیر جدید

ابتدا Miniconda یا توزیع سازگار Conda را نصب و ترمینال آن را باز کنید. در این مثال Python 3.11 برای آزمایش رابط انتخاب شده است. این انتخاب تضمین سازگاری کد قدیمی GECORIS نیست. محیط base را محل نصب وابستگی‌های پژوهش قرار ندهید.

فرمان‌های زیر فقط محیط پایه را می‌سازند. پس از نصب، مسیر sys.executable و مسیر pip باید به همین محیط اشاره کند. در VS Code یا Jupyter نیز مفسر یا kernel همین محیط را انتخاب کنید؛ فعال بودن Conda در یک ترمینال، kernel قبلی notebook را عوض نمی‌کند.

shell
conda create --override-channels -c conda-forge -n spmgeo-snap python=3.11 pip
conda activate spmgeo-snap
python -c "import sys, platform; print(sys.executable); print(sys.version); print(platform.platform()); print(platform.machine())"
python -m pip --version

۹. اتصال رابط جدید در Linux / Bash

برای SNAP 12 به بعد، نصب esa-snappy با pip و اجرای snappy-conf برای همان مفسر دو مرحله مجزا هستند [۳]. مسیر نمونه زیر را اصلاح کنید و در صورت خطا به مرحله بعد نروید. نام بسته نصب esa-snappy است، ولی نام import آن esa_snappy است.

bash
conda activate spmgeo-snap
spm_python="$(python -c 'import sys; print(sys.executable)')"
spm_snap_bin="/opt/esa-snap/bin"
"$spm_python" -m pip install esa-snappy && \
  "$spm_snap_bin/snappy-conf" "$spm_python" && \
  "$spm_python" -c "import esa_snappy; from esa_snappy import ProductIO; print(esa_snappy.__file__); print(ProductIO)"

۱۰. اتصال رابط جدید در Windows / PowerShell

در PowerShell دارای دسترسی به conda، محیط را فعال کنید. ابتدا نام واقعی فایل snappy-conf را در bin ببینید. مثال زیر برای نصب دارای snappy-conf.bat است؛ اگر نصب شما نام متفاوتی دارد، مسیر را مطابق همان فایل تغییر دهید. علامت & اجرای مسیر داخل رشته را ممکن می‌کند.

powershell
conda activate spmgeo-snap
$spmPython = python -c "import sys; print(sys.executable)"
$spmSnapBin = 'C:\Tools\esa-snap\bin'
Get-ChildItem $spmSnapBin -Filter 'snappy-conf*'
$spmConf = Join-Path $spmSnapBin 'snappy-conf.bat'
if (-not (Test-Path $spmConf)) { throw 'Check the snappy-conf filename and path.' }
& $spmPython -m pip install esa-snappy
if ($LASTEXITCODE -ne 0) { throw 'Package installation failed.' }
& $spmConf $spmPython
if ($LASTEXITCODE -ne 0) { throw 'SNAP configuration failed.' }
& $spmPython -c "import esa_snappy; from esa_snappy import ProductIO; print(esa_snappy.__file__); print(ProductIO)"
if ($LASTEXITCODE -ne 0) { throw 'Bridge import failed.' }

۱۱. بازتولید محیط تاریخی GECORIS

این مسیر را در محیط مجزا اجرا کنید. ترکیب زیر بازنویسی دستور تاریخی مستندات است [۱] و تضمینی برای حل وابستگی در مخازن امروزی ندارد. اگر resolver شکست خورد، خطای حل وابستگی، سیستم‌عامل و کانال‌ها را ثبت کنید؛ ارتقای تصادفی h5py یا Python به معنی بازتولید همان محیط نیست.

وابستگی‌های باینری مانند GDAL، HDF5 و libgfortran به نسخه سیستم‌عامل وابسته‌اند. برای خطای libgfortran3، کتابخانه تصادفی دانلود نکنید و symlink آن را به libgfortran5 نسازید. یک image سازگار یا محیط آرشیوشده معتبر را بررسی کنید.

bash
# Isolated legacy environment only
conda create -n spmgeo-gecoris-legacy python=3.6
conda activate spmgeo-gecoris-legacy
conda install numpy scipy matplotlib pandas shapely requests scikit-image h5py=2.10
conda install -c conda-forge gdal netcdf4
# Install the matching SNAP 8 / radar toolbox separately.

۱۲. اتصال رابط قدیمی snappy

برای نسل تاریخی، راهنمای همان نسخه SNAP را دنبال کنید [۴]. دستور زیر نمونه Linux است: مسیر SNAP 8 و محل واقعی پوشه تولیدشده snappy را جایگزین کنید. setup.py مربوط به بسته تولیدشده رابط است، نه هر بسته‌ای با همین نام.

بسته فشرده‌سازی هم‌نام snappy رابط ESA نیست. علاوه بر import، وجود ProductIO و خواندن محصول را کنترل کنید. نصب esa-snappy در محیط تاریخی، جایگزین خودکار این مرحله نیست.

bash
conda activate spmgeo-gecoris-legacy
spm_legacy_python="$(python -c 'import sys; print(sys.executable)')"
/path/to/snap8/bin/snappy-conf "$spm_legacy_python"
# Continue only after successful configuration; inspect the generated path.
cd "$HOME/.snap/snap-python/snappy"
"$spm_legacy_python" setup.py install
"$spm_legacy_python" -c "import snappy; from snappy import ProductIO; print(snappy.__file__); print(ProductIO)"

۱۳. وابستگی‌های علمی و کنترل ناسازگاری باینری

فهرست وابستگی را از نسخه کدی که واقعاً دریافت می‌کنید استخراج کنید. برای مسیر جدید، اگر فایل environment یا requirements معتبر همان commit وجود دارد، همان را مبنا قرار دهید و محدودیت نسخه‌ها را قبل از نصب بررسی کنید. دستور تاریخی را بدون تحلیل به محیط جدید منتقل نکنید.

در محیط آزمایشی جدید، بهتر است بسته‌های علمی باینری از یک کانال سازگار حل شوند و سپس بسته‌های فقط pip نصب شوند. مخلوط‌کردن بی‌برنامه بسته‌های Conda، pip و کتابخانه‌های سیستم می‌تواند به خطای ABI منجر شود. پس از تغییر بسته‌های باینری، آزمون خواندن داده را تکرار کنید.

گروهکاربردآزمون اولیه
NumPy / SciPyآرایه و محاسبات علمیimport و محاسبه عددی کوچک
pandas / matplotlibجدول و نمایشخواندن جدول و ذخیره شکل نمونه
GDAL / Shapelyداده مکانی و هندسهfrom osgeo import gdal؛ نسخه و خواندن فایل کوچک
h5py / netCDF4HDF5 و NetCDFخواندن فایل نمونه واقعی
requests / cdsapiدریافت داده خارجیدرخواست کوچک به سرویس با احراز هویت معتبر

۱۴. دریافت GECORIS و ثبت هویت کد

نشانی زیر همان مخزن معرفی‌شده در مستندات است [۱]. در صورت نیاز به احراز هویت، از روش رسمی میزبان مخزن استفاده کنید و توکن را داخل URL، اسکریپت یا گزارش قرار ندهید. دسترسی واقعی مخزن و اجزای آن باید در زمان دریافت احراز شود.

پس از دریافت، commit، branch و تغییرات محلی را ثبت کنید. وجود فایل‌های مورد نیاز مانند batchPrepare.py و batchCoreg.py و ماژول‌های واردشده در آن‌ها را بررسی کنید. مستندات عمومی برای بخش InSAR محدودیت دسترسی ذکر می‌کنند [۵]؛ فایل غایب را خطای Conda تلقی نکنید.

bash
git clone https://memorid@bitbucket.org/memorid/gecoris.git
cd gecoris
git rev-parse HEAD
git status --short
# Bash: session-local paths; run from the repository root.
export gecoris_HOME="$PWD"
export PYTHONPATH="$gecoris_HOME${PYTHONPATH:+:$PYTHONPATH}"
export PATH="$gecoris_HOME/gecoris:$PATH"
python -c "import importlib.util; print(importlib.util.find_spec('gecoris'))"

۱۵. مسیر GECORIS در Windows و اجرای غیرتعاملی

در PowerShell از ریشه مخزن دریافت‌شده، متغیرهای همین نشست را تنظیم کنید. از تغییر سراسری PATH با setx /M برای راه‌اندازی اولیه خودداری کنید. بعد از موفقیت، مسیرها را در launcher اختصاصی پروژه ثبت کنید.

در scheduler، سرویس یا اجرای SSH، فرض نکنید محیط ترمینال تعاملی منتقل شده است. مسیر مطلق Python، پوشه کاری، مسیر داده، متغیرهای مورد نیاز و مقصد لاگ را صریح مشخص کنید. برای کار طولانی، stdout، stderr و exit code را نگه دارید.

powershell
# Run from the GECORIS repository root.
$env:gecoris_HOME = (Get-Location).Path
$env:PYTHONPATH = "$env:gecoris_HOME;$env:PYTHONPATH"
$env:PATH = "$(Join-Path $env:gecoris_HOME 'gecoris');$env:PATH"
python -c "import sys, importlib.util; print(sys.executable); print(importlib.util.find_spec('gecoris'))"

۱۶. آزمون مرحله‌ای: از import تا خواندن پیکسل

آزمون را در همان محیط و با همان مفسری اجرا کنید که پردازش اصلی از آن استفاده خواهد کرد. کد زیر را با نام probe_snap.py ذخیره کنید. ورودی باید manifest.safe یک محصول Sentinel-1 SLC کامل باشد؛ نام bridge را برای مسیر جدید esa_snappy و برای مسیر تاریخی snappy قرار دهید.

این آزمون نام باندها، ابعاد و خواندن یک پنجره کوچک را بررسی می‌کند؛ آزمون علمی هم‌ثبت‌سازی یا فاز نیست. خواندن metadata بدون readPixels کافی نیست، زیرا خطای دسترسی به measurement ممکن است تنها هنگام خواندن پیکسل آشکار شود.

python
import argparse
import importlib
import sys
import numpy as np

parser = argparse.ArgumentParser()
parser.add_argument("bridge", choices=["snappy", "esa_snappy"])
parser.add_argument("product")
args = parser.parse_args()
bridge = importlib.import_module(args.bridge)
print("python:", sys.executable)
print("bridge:", bridge.__file__)
product = bridge.ProductIO.readProduct(args.product)
if product is None:
    raise RuntimeError("No reader accepted the input product")
try:
    names = list(product.getBandNames())
    width = product.getSceneRasterWidth()
    height = product.getSceneRasterHeight()
    print("product:", product.getName(), product.getProductType())
    print("size:", width, height, "bands:", names)
    if not names or min(width, height) < 1:
        raise RuntimeError("Empty raster")
    band = product.getBand(names[0])
    w, h = min(16, width), min(16, height)
    values = np.empty(w * h, dtype=np.float32)
    band.readPixels(0, 0, w, h, values)
    finite = np.isfinite(values)
    print("finite pixels:", int(finite.sum()), "/", values.size)
    if not finite.any():
        raise RuntimeError("No finite pixels in the test window")
    print("PASS: reader and a small pixel window only")
finally:
    product.dispose()
# Example (modern):
# python probe_snap.py esa_snappy /data/example.SAFE/manifest.safe
# Example (legacy):
# python probe_snap.py snappy /data/example.SAFE/manifest.safe

۱۷. آزمون کوچک پردازشی و معیار پذیرش

پس از خواندن پیکسل، یک نمونه کوچک با همان مسیر پردازش مقصد اجرا کنید. هدف، آزمون اتصال همه اجزا است؛ ابتدا یک برداشت و سپس در صورت نیاز یک جفت مناسب را پردازش کنید. نام graph، پارامترها، نسخه ابزار، زمان اجرا، بیشینه RAM و حجم خروجی را ثبت کنید.

  • برای مهاجرت نسخه، ورودی، AOI، مدل ارتفاع و پارامترها را ثابت نگه دارید.
  • ابعاد، geocoding، مقادیر مختلط، دامنه، فاز و معیارهای هدف را مطابق مرحله مقایسه کنید؛ شباهت یک تصویر رنگی کافی نیست.
  • تلرانس را بر اساس دقت مورد نیاز پروژه تعیین کنید؛ یک حد عددی عمومی برای همه خروجی‌ها وجود ندارد.
  • لاگ بدون exception شرط لازم است؛ وجود خروجی ناقص، NaN یا مرحله ردشده نیز باید بررسی شود.
دروازهشاهد لازمدر صورت شکست
A — ابزاربازشدن GUI و خروجی GPT helpنصب SNAP، runtime و toolboxها
B — رابطProductIO و مسیر واقعی ماژولPython، jpy و تنظیمات bridge
C — دادهmetadata و readPixels موفقکامل‌بودن SAFE، reader و مجوزها
D — ذخیرهنوشتن و بازخوانی خروجی کوچکفرمت، مسیر، quota و فضای آزاد
E — GECORISاجرای مرحله کوچک و خروجی مورد انتظارAPI، وابستگی‌ها و فایل‌های مخزن
F — اعتبار علمیمقایسه با مرجع و تلرانس از پیش تعیین‌شدهقراردادها، پارامترها و تغییرات نسخه

۱۸. مدیریت RAM، Java و هم‌زمانی

حافظه Python، heap ماشین Java، cache ابزار و حافظه سیستم‌عامل مصرف‌های جداگانه دارند. هنگام اجرای چند worker، مجموع مصرف آن‌ها را بودجه‌بندی کنید. تنظیم حافظه هر پردازش برابر کل RAM باعث کندی شدید یا خاتمه پردازش توسط سیستم‌عامل می‌شود.

برای رابط جدید، تنظیم java_max_mem در esa_snappy.ini و برای GPT تنظیمات launcher و گزینه‌های help همان نسخه را بررسی کنید [۳]. محل فایل و مقدار قبلی را ثبت کنید. حافظه cache با سقف heap یکی نیست؛ تغییر فایل GUI الزاماً حافظه GPT یا Python را تغییر نمی‌دهد.

از یک job شروع کنید، مصرف واقعی را اندازه بگیرید، سپس تعداد worker یا thread را افزایش دهید. کاهش AOI یا تعداد burst، پردازش مرحله‌ای و نوشتن میانی‌ها اغلب از افزایش بی‌حساب heap مؤثرتر است. بعد از استفاده از Product، منابع را آزاد کنید و برای کارهای مستقل، فرایندهای جداگانه با خروج مشخص را ترجیح دهید.

۱۹. سرویس‌های جانبی: مدار، DEM، ERA5 و IONEX

دریافت داده جانبی را جدا از نصب هسته آزمایش کنید. امکان import کتابخانه شبکه به معنی دسترسی به سرویس نیست. پوشش مکانی و زمانی، کامل‌بودن فایل و قابلیت خواندن آن باید پیش از پردازش دسته‌ای بررسی شود.

برای CDS، حساب و شرایط استفاده مجموعه‌داده را تکمیل کنید؛ نسخه فعلی cdsapi و تنظیمات حساب را مطابق راهنمای رسمی بسازید [۷]. ابتدا درخواست کوچک اجرا کنید و کد درخواست تولیدشده همان مجموعه‌داده را مبنا قرار دهید. نام متغیرها، سطوح، زمان UTC و قالب خروجی را کنترل کنید.

برای IONEX، منبع انتخابی، روش احراز هویت، نام‌گذاری روز و محصول و امکان تغییر سرویس را بررسی کنید. نیاز به .netrc وابسته به میزبان است؛ قالب تاریخی NASA را بدون بررسی برای همه سرویس‌ها به کار نبرید. فایل دانلودشده ممکن است صفحه خطای HTML باشد؛ صرف وجود فایل معیار موفقیت نیست.

  • مدار: نوع محصول و بازه اعتبار باید برداشت را پوشش دهد.
  • DEM: پوشش AOI، no-data، datum و اجازه نوشتن cache کنترل شود.
  • ERA5: سطح‌ها، ساعت‌ها، متغیرها و پوشش مورد نیاز مدل تأیید شود.
  • IONEX: تاریخ، بازه زمانی، شبکه TEC و واحدهای parser کنترل شود.
  • فعال بودن atmoFlag=1 مدرک اعمال تصحیح نیست؛ دریافت داده، اجرای مدل و اثر خروجی باید در لاگ مشخص باشد.
  • فایل‌های اعتبارنامه را خارج از مخزن و خروجی عمومی نگه دارید. در Unix، دسترسی فایل‌های حاوی توکن را به مالک محدود کنید.

۲۰. جدول رفع خطا بر اساس لایه

ابتدا متن کامل اولین خطای اصلی، فرمان اجرا، مسیر مفسر و زمان رخداد را نگه دارید. خطای پایانی ممکن است پیام ثانویه باشد. تغییرات را یکی‌یکی اعمال و همان آزمون شکست‌خورده را تکرار کنید.

نشانهبررسی محتملاقدام
conda پیدا نمی‌شودترمینال یا initializationترمینال توزیع Conda را باز و راهنمای init همان پوسته را اجرا کنید
ModuleNotFoundErrorمفسر یا محیط اشتباهsys.executable و python -m pip --version را تطبیق دهید
snappy فاقد ProductIOبسته هم‌نام یا مسیر سایه‌انداز__file__، فایل محلی snappy.py و مسیر import را بررسی کنید
jpy / JVM / DLL load failedمعماری، Java یا bridge ناسازگارنسخه و مسیرها را تطبیق و پیکربندی همان محیط را تکرار کنید
GDAL / HDF5 / undefined symbolناسازگاری کتابخانه باینریدر محیط تازه وابستگی‌ها را منسجم حل کنید؛ DLL تصادفی کپی نکنید
Operator not foundtoolbox یا شناسه operatorافزونه‌ها و help همان نسخه GPT را بررسی کنید
readProduct برابر Noneورودی یا reader نامناسبSAFE کامل و manifest و نوع محصول را در GUI کنترل کنید
Java heap space / killedheap یا RAM کل ناکافیهم‌زمانی و اندازه کار را کم؛ لاگ سیستم و حافظه را بررسی کنید
Permission denied / disk fullمجوز، quota، temp یا دیسکمسیر قابل نوشتن و ظرفیت همه مسیرهای موقت را کنترل کنید
HTTP 401 / 403اعتبارنامه، مجوز یا شرایط دادهپاسخ سرویس و حساب را کنترل کنید؛ کلید را در گزارش نگذارید
Timeout / TLS errorشبکه، proxy، گواهی یا سرویسبا درخواست کوچک و تنظیم صحیح CA تشخیص دهید
خطای API در GECORIS جدیدتفاوت نسل رابط یا نسخه وابستگیبه commit و محیط مرجع برگردید یا مهاجرت را با آزمون انجام دهید

۲۱. لاگ‌ها و گزارش قابل بررسی

برای هر اجرا یک پوشه مستقل لاگ بسازید؛ فرمان، exit code، زمان شروع و پایان UTC، ورودی‌ها و پارامترهای مؤثر را ثبت کنید. لاگ شکست‌خورده را با اجرای بعدی بازنویسی نکنید. پیش از اشتراک، توکن‌ها، URLهای دارای اعتبارنامه و اطلاعات غیرضروری حساب را حذف کنید.

برای خطای رابط جدید، snappyutil.log در محل بسته esa_snappy را بررسی کنید. مسیرهای معمول لاگ SNAP در Linux برابر ~/.snap/system/var/log و در Windows برابر پوشه .snap\var\log یا AppData\Roaming\SNAP\var\log زیر پوشه کاربر است؛ مسیر واقعی به نصب وابسته است [۳]. نبود فایل در یکی از این مسیرها به معنی نبود خطا نیست.

  • اطلاعات عمومی: سیستم‌عامل، معماری، Python، Conda، SNAP و نسخه افزونه‌ها.
  • اطلاعات اتصال: sys.executable، مسیر ماژول bridge، Java مورد استفاده و تنظیم حافظه.
  • اطلاعات پردازش: commit، graph، تنظیمات، شناسه داده، مدار و DEM.
  • اطلاعات خطا: traceback کامل، stderr، فضای آزاد و وضعیت حافظه؛ بدون اعتبارنامه.

۲۲. ثبت محیط، نسخه‌ها و بازتولید

پس از قبولی آزمون‌ها، محیط را ثبت کنید. فایل explicit برای بازسازی بسته‌های Conda روی همان پلتفرم مناسب است؛ فایل from-history فقط درخواست‌های اصلی را نگه می‌دارد و حل دقیق نسخه‌ها را تضمین نمی‌کند [۶]. هیچ‌کدام به‌تنهایی نصب‌کننده SNAP، افزونه‌ها، Java، تنظیم bridge یا داده‌های جانبی را آرشیو نمی‌کنند.

pip freeze را جدا نگه دارید؛ نصب دوباره آن روی یک محیط متفاوت ممکن است نتیجه یکسان ندهد. خروجی‌های export و freeze را پیش از انتشار برای URL دارای توکن یا مسیر خصوصی بررسی کنید. شماره نسخه صرف، جای checksum نصب‌کننده و هویت داده را نمی‌گیرد.

  • نصب‌کننده SNAP، checksum، نسخه افزونه‌ها و تنظیمات bridge را نگه دارید.
  • graphها، پارامترها و فایل‌های ورودی آزمون یا شناسه و checksum آن‌ها را ثبت کنید.
  • اگر کد محلی تغییر کرده، patch و علت تغییر را نیز نگه دارید؛ SHA مخزن به‌تنهایی تغییرات محلی را پوشش نمی‌دهد.
  • یک بازسازی روی محیط پاک انجام دهید و نتیجه را با معیار پذیرش مقایسه کنید.
shell
# Run inside the accepted environment; use a new provenance directory.
conda list --explicit > conda-explicit.txt
conda env export --from-history > environment-history.yml
conda env export > environment-resolved.yml
python -m pip freeze > pip-freeze.txt
python -m pip check
python -c "import sys, platform; print(sys.executable); print(sys.version); print(platform.platform()); print(platform.machine())" > runtime.txt
# Run these two commands from the GECORIS repository:
git rev-parse HEAD > gecoris-commit.txt
git status --short > gecoris-working-tree.txt

۲۳. ارتقا، بازگشت و نگهداری

نسخه جدید را در محیط جدا نصب کنید؛ محیط پذیرفته‌شده پروژه را در میانه سری زمانی ارتقا ندهید. ابتدا آزمون‌های A تا F را روی همان داده مرجع اجرا و اختلاف خروجی را مستند کنید. پذیرش نسخه جدید باید تصمیمی ثبت‌شده باشد.

برای بازگشت، snapshot یا محیط قبلی، نصب‌کننده SNAP و تنظیمات آن لازم است. clone محیط Conda، snapshot کامل سیستم نیست. پاک‌سازی cache یا work را تنها پس از اطمینان از نگهداری ورودی، پارامترها و خروجی پذیرفته‌شده انجام دهید.

برای اجرای container، علاوه بر image و digest، مجوز نرم‌افزار، معماری، volume داده، پوشه قابل نوشتن کاربر، تنظیم Java و روش دریافت داده‌های کمکی را ثبت کنید. container نیز جای آزمون علمی را نمی‌گیرد. ابزار Delft/Caroline مسیر مستقلی دارد و جایگزین مستقیم همه مراحل GECORIS فرض نمی‌شود.

۲۴. چک‌لیست تحویل محیط آماده پردازش

یک محیط زمانی آماده پردازش پروژه است که تمام موارد مرتبط زیر شاهد ثبت‌شده داشته باشند. وضعیت هر مورد را «قبول»، «رد» یا «نامرتبط با دلیل» بنویسید؛ مورد اجرا‌نشده را قبول علامت نزنید.

  • مسیر تاریخی یا جدید و علت انتخاب مشخص است؛ سیستم‌عامل و معماری ثبت شده‌اند.
  • فضای آزاد، temp، مجوز نوشتن و سیاست آرشیو بررسی شده‌اند.
  • SNAP، ابزارهای راداری و GPT قابل اجرا هستند.
  • Python و pip به محیط صحیح اشاره می‌کنند؛ bridge صحیح ProductIO را وارد می‌کند.
  • محصول SLC نمونه در GUI و Python خوانده و پیکسل واقعی دریافت شده است.
  • خروجی کوچک نوشته و دوباره خوانده شده است.
  • هویت کد و دسترسی به همه اجزای مورد نیاز GECORIS احراز شده است.
  • داده‌های جانبی مورد نیاز دانلود، خوانده و از نظر پوشش کنترل شده‌اند.
  • آزمون پردازشی کوچک و مقایسه علمی متناسب با کاربرد پذیرفته شده‌اند.
  • نسخه‌ها، تنظیمات، لاگ‌ها، checksumها و روش بازگشت ثبت شده‌اند.
همکاری برای ارزیابی میدانی

برای گفت‌وگو درباره محل پایلوت، داده راداری یا اندازه‌گیری مستقل با تیم پژوهش در ارتباط باشید.

ارتباط با تیم پژوهش ←