conda-lock - قفل بيئة Conda قابلة للتكرار
conda-lock يحل مشكلة قابلية إعادة الإنتاج لـ conda. يسرد environment.yml packages المطلوبة، لذا يمكن حل ذلك على ماكينتين بعد أسبوع ينتج إصدارات مختلفة — الكلاسيكية “تعمل على جهازي”. conda-lock يحل البيئة مرة واحدة وكتب قفل ملف مع إصدارات دقيقة وبناء وتجزئات لكل منصة تستهدفها، بحيث تصبح التثبيتات حتمية وسريعة (لا حل في وقت التثبيت).
التثبيت
| الطريقة | الأمر |
|---|
| pipx (موصى به) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| التحقق | conda-lock --version |
إنشاء ملف القفل
# قفل لمنصات متعددة من environment.yml
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
| العلم | الغرض |
|---|
-f, --file | مواصفات الإدخال (environment.yml, pyproject.toml, meta.yaml) |
-p, --platform | منصة الهدف (قابلة للتكرار) |
-k, --kind | نوع الإخراج: lock (موحد)، explicit, env |
--lockfile | مسار الإخراج (افتراضي conda-lock.yml) |
--check-input-hash | تخطي إعادة الحل إذا كانت المدخلات دون تغيير |
أنواع ملفات القفل
| النوع | ينتج | الاستخدام |
|---|
lock | موحد conda-lock.yml (جميع المنصات) | احفظ هذا في git |
explicit | ملفات .lock لكل منصة | conda create --file |
env | environment.yml المقدمة | الأدوات التي تتوقع ملف بيئة عادي |
# تقديم ملفات صريحة لكل منصة من القفل الموحد
conda-lock render -p linux-64
التثبيت من القفل
# إنشاء بيئة بالضبط كما مغلقة
conda-lock install --name myenv conda-lock.yml
# أو مع micromamba (سريع)
micromamba create -n myenv -f conda-linux-64.lock
| الأمر | الوصف |
|---|
conda-lock install -n NAME | إنشاء/تحديث البيئة من قفل |
conda-lock install --mamba | استخدم mamba كمحلل/مثبت |
conda create --file X.lock | التثبيت من قفل صريح مباشرة |
تحديث التبعيات
# إعادة حل كل شيء (نسخ جديدة مسموحة)
conda-lock -f environment.yml -p linux-64 -p osx-arm64
# تحديث حزمة واحدة فقط، احتفظ بالباقي مثبتًا
conda-lock --update numpy -f environment.yml -p linux-64
| المهمة | الأمر |
|---|
| تحديث كامل | إعادة تشغيل conda-lock |
| دفعة موجهة | --update PKG |
| التحقق من عدم تغيير المدخلات | --check-input-hash |
تضمين تبعيات pip
# environment.yml
name: myproject
channels: [conda-forge]
dependencies:
- python=3.12
- numpy
- pip
- pip:
- some-pypi-only-package==1.2.3
conda-lock يحل كل من تبعيات conda و pip في نفس ملف القفل، وهو مهم لأن خلط الاثنين بطريقة مخصصة هو مصدر شائع للبيئات المكسورة.
نمط CI
# تثبيتات CI حتمية وسريعة
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
| الممارسة | السبب |
|---|
احفظ conda-lock.yml | القفل هو مصدر الحقيقة |
| قفل جميع منصات الهدف | المطورون على macOS، CI على Linux |
| إعادة الحل بقصد | تحديثات التبعية تصبح diffs قابلة للمراجعة |
| ذاكرة البيئة | الأقفال تجعل التخزين المؤقت موثوقًا به |
conda-lock مقابل البدائل
| الجانب | conda-lock | environment.yml | pixi | uv |
|---|
| قابل للتكرار | دبابيس دقيقة + تجزئات | لا | قفل مدمج | قفل مدمج |
| نظام conda | نعم | نعم | نعم | لا (PyPI) |
| قفل متعدد منصة | نعم | N/A | نعم | نعم |
| الأفضل لـ | قفل مشاريع conda الموجودة | بيئات بسيطة/مخصصة | مشاريع conda جديدة | مشاريع Python نقية |
للمشاريع الجديدة تفكر في pixi (القفل مدمج) أو uv للـ Python النقية؛ conda-lock retrofits القابلية المتكررة إلى سير العمل conda الموجود.
الموارد