Rez هو مدير حزم متعدد المنصات مع اختلاف. باستخدام Rez، يمكنك إنشاء بيئات مستقلة تم تكوينها لمجموعة معينة من الحزم. ومع ذلك، على عكس العديد من مديري الحزم الآخرين، لا يتم تثبيت الحزم في هذه البيئات المستقلة. بدلاً من ذلك، يتم تثبيت جميع إصدارات الحزم في مستودع مركزي، وتشير البيئات المستقلة إلى هذه الحزم الموجودة. وهذا يعني أن البيئات التي تم تكوينها خفيفة الوزن وسريعة الإنشاء، وغالبًا ما يستغرق تكوينها بضع ثوانٍ فقط على الرغم من احتوائها على مئات الحزم.
راجع الويكي للحصول على الوثائق الكاملة.
يقوم مديرو الحزم النموذجيون بتثبيت الحزم في البيئة
يقوم Rez بتثبيت الحزم مرة واحدة، ويقوم بتكوين البيئات ديناميكيًا
يأخذ Rez قائمة بطلبات الحزم، ويبني البيئة المستهدفة، ويحل جميع تبعيات الحزمة الضرورية. يتم دعم أي نوع من حزم البرامج - المترجمة والبايثون والتطبيقات والمكتبات.
يتم تخزين الحزم في مستودعات على القرص. تحتوي كل حزمة على ملف تعريف واحد موجز ( package.py ) يحدد تبعياتها، وأوامرها (كيفية تكوين البيئة التي تحتوي عليها)، وبيانات التعريف الأخرى. على سبيل المثال، ما يلي هو ملف تعريف الحزمة لوحدة بايثون للطلبات الشائعة:
name = "requests" version = "2.8.1" authors = ["Kenneth Reitz"] requires = [ "python-2.7+" ] def commands(): env.PYTHONPATH.append("{root}/python")
تتطلب هذه الحزمة python-2.7 أو أكبر. عند استخدامه، يتم إلحاق الدليل الفرعي "python" داخل موقع التثبيت الخاص به بمتغير البيئة PYTHONPATH.
عند إنشاء بيئة باستخدام rez API أو أداة rez-env ، تقوم خوارزمية تحليل التبعية بتتبع متطلبات الحزمة وحلها إلى قائمة الحزم المطلوبة. يتم تجميع الأوامر من هذه الحزم وتقييمها، مما ينتج عنه بيئة مكونة. Rez قادر على تكوين البيئات التي تحتوي على مئات الحزم، غالبًا في غضون ثوانٍ قليلة. يمكن أيضًا حفظ الحلول في ملف، وعند إعادة تقييمها لاحقًا، سيتم إعادة بناء نفس البيئة مرة أخرى.
يضع هذا المثال المستخدم في غلاف تم حله يحتوي على الحزم المطلوبة، باستخدام أداة rez-env:
]$ rez-env requests-2.2+ python-2.6 'pymongo-0+<2.7' You are now in a rez-configured environment. resolved by [email protected], on Wed Feb 26 15:56:20 2014, using Rez v2.0.0 requested packages: requests-2.2+ python-2.6 pymongo-0+<2.7 resolved packages: python-2.6.8 /software/ext/python/2.6.8 platform-linux /software/ext/platform/linux requests-2.2.1 /software/ext/requests/2.2.1/python-2.6 pymongo-2.6.3 /software/ext/pymongo/2.6.3 arch-x86_64 /software/ext/arch/x86_64 > ]$ _
ينشئ هذا المثال بيئة تحتوي على الحزمة "houdini" الإصدار 12.5 أو أحدث، ويقوم بتشغيل الأمر "hescape -h" داخل تلك البيئة:
]$ rez-env houdini-12.5+ -- hescape -h Usage: hescape [-foreground] [-s editor] [filename ...] -h: output this usage message -s: specify starting desktop by name -foreground: starts process in foreground
يمكن أيضًا إنشاء البيئات التي تم حلها عبر واجهة برمجة التطبيقات:
>>> import subprocess >>> from rez.resolved_context import ResolvedContext >>> >>> r = ResolvedContext(["houdini-12.5+", "houdini-0+<13", "java", "!java-1.8+"]) >>> p = r.execute_shell(command='which hescape', stdout=subprocess.PIPE) >>> out, err = p.communicate() >>> >>> print(out) '/software/ext/houdini/12.5.562/bin/hescape'
أولاً، قم بتثبيت Rez باستخدام Python 3.7+. قم بتنزيل المصدر، ومن الدليل المصدر، قم بتشغيل (مع استبدال DEST_DIR بموقع التثبيت الخاص بك):
]$ python3 ./install.py -v DEST_DIR
يؤدي هذا إلى تثبيت أدوات سطر أوامر Rez. سيتم طباعة رسالة في النهاية تخبرك بكيفية استخدام Rez عند اكتمال التثبيت. Rez ليست حزمة Python عادية ولذلك لا تقوم بتثبيتها عادةً باستخدام النقطة أو setup.py. لا تنقل التثبيت - أعد التثبيت إلى موقع جديد إذا كنت تريد تغيير مسار التثبيت. إذا كنت تريد تثبيت rez لأنظمة تشغيل متعددة، فقم بإجراء عمليات تثبيت منفصلة لكل نظام من هذه الأنظمة.
بعد ذلك، تحتاج إلى إنشاء بعض حزم Rez الأساسية. تقوم أداة rez-bind بإنشاء حزم Rez التي تعتمد على البرامج المثبتة بالفعل على نظامك. حاول ربط قائمة الحزم التالية (لاحظ أنه بالنسبة لـ Python، قد تحتاج إلى امتيازات إدارية):
]$ rez-bind platform ]$ rez-bind arch ]$ rez-bind os ]$ rez-bind python
الآن يجب أن تكون قادرًا على إنشاء بيئة تحتوي على لغة بايثون. جرب هذا:
]$ rez-env python -- which python /home/ajohns/packages/python-2.7.8/platform-linux/arch-x86_64/os-Ubuntu-12.04/bin/python
تُستخدم أداة rez-build لإنشاء الحزم وتثبيتها محليًا (عادةً إلى $HOME/packages ). بمجرد الانتهاء من ذلك، يمكنك استخدامها عبر rez-env ، تمامًا مثل أي حزمة أخرى:
]$ cd example_packages/hello_world ]$ rez-build --install ... ]$ rez-env hello_world -- hello Hello world!
يدعم Linux وOSX وWindows؛
يسمح بدورة اختبار البناء والتثبيت السريعة والفعالة؛
إنشاء أصداف من النوع: bash، وtcsh، وغيرها (يمكن إضافة الأصداف كمكونات إضافية)؛
يحتوي على نظام نشر يدعم git وmercurial وsvn (كمكونات إضافية)؛
يمكن حفظ حلول البيئة على القرص وإعادة استخدامها في وقت لاحق (يشبه إلى حدٍ ما برنامج VirtualEnv)؛
قابل للتوصيل بشكل كبير، ويدعم خمسة أنواع مختلفة من المكونات الإضافية للقيام بأشياء بدءًا من إضافة أنواع الصدفة الجديدة إلى إضافة أنظمة إنشاء جديدة؛
يحتوي على خوارزمية حل الإصدار، لتجنب تعارض الإصدار؛
تصور البيئات التي تم حلها في رسم بياني نقطي؛
تم العثور على الحزم في مسار البحث، لذلك يمكن نشر حزم مختلفة في مواقع مختلفة؛
يدعم أرقام الإصدارات الأبجدية الرقمية؛
لديه بنية قوية لمتطلبات الإصدار، وقادرة على وصف أي نطاق إصدار، وعامل تعارض لرفض نطاقات الإصدار؛
"متغيرات" الحزمة - طريقة لتحديد النكهات المختلفة لنفس إصدار الحزمة، على سبيل المثال مكون إضافي مصمم لإصدارات متعددة من التطبيق المضيف؛
يمكن إضافة روابط الإصدار المخصصة (مثل عمليات ما بعد الإصدار) كمكونات إضافية؛
يحتوي على ميزة قفل الوقت، والتي تسمح بإعادة إنشاء الحلول القديمة (يتم تجاهل الحزم الأحدث)؛
تعريفات الحزمة عبارة عن ملف واحد موجز؛
تحدد الحزم تأثيرها على البيئة (إضافة إلى PATH وما إلى ذلك) بطريقة لا تعتمد على النظام الأساسي والصدفة، باستخدام واجهة برمجة تطبيقات python المخصصة؛
يحتوي على نظام تخزين مؤقت قائم على memcached، لحل بيئة التخزين المؤقت؛
يحتوي على ميزة تصفية الحزم، مما يسمح بإصدارات الحزم المرحلية مثل حزم ألفا وبيتا.
إذا وجدت خطأ ما، أو كنت بحاجة إلى مساعدة، أو كنت ترغب في التحدث إلى المطورين، فإليك قائمة بالطرق المختلفة للتواصل معنا:
الإبلاغ عن مشكلة
غرفة الدردشة: انضم إلى قناة #rez
ابدأ مناقشة
القائمة البريدية: لاحظ أنها أقل نشاطًا في القائمة البريدية مقارنة بأي قناة اتصال أخرى.
لا تعمل إصدارات CMake حاليًا على Windows مع Rez ويتم تخطي الاختبارات ذات الصلة. يتطلب الإصلاح تغييرات متعددة موجودة على خريطة الطريق. نجح المستخدمون في تنفيذ حلول بديلة لاستخدام CMake مع Rez ضمن Windows، ولكن الهدف هو توفير تجربة سلسة على أي نظام أساسي في المستقبل. لمزيد من التفاصيل راجع هذه المشكلة