xonsh - python كبديل عن غلاف

والمثير للدهشة ، على المحور ، أنه لا يوجد حتى الآن أي منشور حول مثل هذا الغلاف المثير للاهتمام للغاية مثل xonsh ( github ) ، من وجهة نظري ، فإن بناء جميع القذائف أمر رهيب ولا أرى أي سبب لحفظه في القرن الحادي والعشرين ، و Python ، في لديها بنية ممتازة والعديد من المزايا الأخرى ، لذلك ، في رأيي ، يجب أن تكون لغة الأتمتة الافتراضية ، وهو ما تحاول xonsh تحقيقه .


لقد كنت أستخدم xonsh لبعض الوقت ، لذلك أعتقد أنه يمكنني التحدث عنه بما يكفي لبدء استخدامه.


الحجوزات:


  • xonsh هو فقط حول Python 3 ، ولكن هذا هو المعيار .
  • لم يتم إصدار xonsh بعد (الإصدار 0.8.3 في وقت الكتابة) ، على ما يبدو ، وفقًا للمطورين ، لم يتم تنفيذ جميع الميزات المطلوبة حتى الآن ، ولكن وفقًا لمشاعري ، يعمل كل شيء (إذا نظرت إلى الاختلافات ، حول أي منها أدناه).

السمة الرئيسية لـ xonsh هي أنها تخمن "بطريقة سحرية" ما أدخلته - أمر python أو shell ، وهذا يعمل بشكل جيد.


يمكنك إدراج رمز الثعبان في أوامر shell باستخدام كلب .


لن أتطرق إلى الميزات الموجودة في xonsh ، وهذا موضح بوضوح ووضوح في الوثائق وفي أي مقالات ، من وجهة نظري ، يكفي أن تتمكن من الحصول على بناء جملة الحلقة الطبيعية في الصدفة:


worldmind@x ~ $ for i in range(3): ............... echo $SHELL 

لذلك ، سأحاول التركيز على ما لم يتم وصفه أو وصفه بشكل سيئ.


التثبيت


سوف أصف التثبيت (لـ Debian / Ubuntu) الذي لا يتطلب امتيازات المستخدم الفائق ، على الرغم من أنني تحولت مؤخرًا إلى مثل هذا المخطط فقط ، وضعته في مجلدات النظام من قبل ، وكتبته في /etc/shells وقمت بتغيير الغلاف باستخدام الأمر chsh ، ولكن للوهلة الأولى يعمل كل شيء أيضًا بالطريقة الجديدة ، ويبدو لي أنه أكثر صحة ، لا أريد انسداد النظام بحزم ليس من المستودعات ، ولكن هنا يقرر الجميع بنفسه.


نضع النقطة إذا لم تكن بالفعل:


 sudo apt-get install python3-pip 

نضع xonsh (بدون sudo) ، أعطي أمرًا يقوم بتثبيت جميع التبعيات الاختيارية للحصول على جميع الكعك التي تصممها المؤلفون ، إذا كان شخص ما يريد تثبيتًا بسيطًا ، فيمكنك إزالة الأقواس المربعة مع المحتويات:


 pip3 install --user xonsh[ptk,pygments,proctitle,linux] 

على الأرجح أن لديك بالفعل في مكان ما في ملف. كان عليه أن يركض ويرى.
التحديث قياسي:


 pip3 install --user xonsh --upgrade 

venv


نضع venv إذا أردنا استخدام الوظيفة المقابلة (انظر المزيد في vox):


 sudo apt-get install python3-venv 

يتم شحذ جميع أنواع venvs لأصداف محددة ، لذلك تقدم xonsh غلافها الخاص المسمى vox ، ولكن للاستخدام المريح يستحق تثبيت امتداد avox :


 pip3 install --user xontrib-avox 

تركيب Pyenv


إذا كانت هناك حاجة لبيئات افتراضية مع إصدار عشوائي من python ، فأنت بحاجة إلى استنساخ pyenv عن طريق تثبيت التبعيات أولاً لبناء الثعبان :


 git clone https://github.com/pyenv/pyenv.git ~/.pyenv 

علاوة على ذلك ، في مثال التكوين ، يمكنك رؤية تثبيت زوج من متغيرات البيئة لاستخدام pyenv.


إطلاق


الآن لدينا كل شيء مثبت ويبقى جعل xonsh غلافًا ، حتى لا يتم تغيير أي شيء خارج مجلد المستخدم ، أستخدم الكود التالي (بناءً على SO ) للباش (إذا كان لديك غلاف آخر ، فأنت تعرف ما يجب القيام به ، ولكن لا تستخدم. بما أن xonsh يقرأها أيضًا) تمت إضافتها إلى .bashrc :


 # set default shell without editing /etc/shells if [ "${XONSH_VERSION:-unset}" = "unset" ] ; then export SHELL=$HOME/.local/bin/xonsh exec $HOME/.local/bin/xonsh -l fi 

نعيد تشغيل الصدفة ، وإذا سار كل شيء على ما يرام ، فأنت بالفعل في xonsh ، أي بشكل أساسي في وحدة تحكم python ويمكنك ، على سبيل المثال ، إجراء العمليات الحسابية مباشرة على سطر الأوامر ، على سبيل المثال ، اكتشف كم سيكون 2+2 .


التخصيص


قبل البدء في استخدامه ، يجب عليك إنشاء ملف تكوين .xonshrc :


 aliases['g'] = 'git' import os local_bin = '{}/.local/bin'.format($HOME) if os.path.isdir(local_bin): $PATH.append(local_bin) $PYENV_ROOT = '%s/.pyenv' % $HOME $PATH.insert(0, '%s/bin' % $PYENV_ROOT) xontrib load vox $PROJECT_DIRS = ["~/projects"] xontrib load avox 

إعادة تشغيل الصدفة لتطبيق الإعدادات الجديدة.


يجدر الانتباه إلى نموذج البيانات البشرية - الأسماء المستعارة عبارة عن قاموس ، والطرق قائمة ، يبدو واضحًا ، ولكن لسبب ما ليس دائمًا هكذا.
أيضا ، قمنا باستيراد وحدة os في التكوين ، مما يعني أنه سيكون متاحًا بالفعل في غلافنا ، حتى تتمكن من استيراد الوحدات اللازمة والحصول على البيئة الخاصة بك والمريحة.


بداية الملف أعلاه هي أكثر لإثبات القدرات ، ولكن الأسطر الثلاثة الأخيرة تسمح لك باستخدام البيئات الافتراضية بشكل ملائم ، يتم استخدام مثال على ذلك لاحقًا.


استخدام البيئات الافتراضية


قم بإنشاء مجلد مشروع (يتوقع avox أن تكون جميع المشاريع في $PROJECT_DIRS ):


 mkdir -p projects/test 

إنشاء بيئة افتراضية لهذا المشروع:


 vox new test 

بفضل إضافة avox تهيئتها avox نحتاج فقط إلى الانتقال إلى مجلد المشروع لتنشيط البيئة الافتراضية ، ولا نحتاج إلى إجراء أي source ./bin/activate غريب source ./bin/activate :


 worldmind@x ~ $ cd projects/test/ (test) worldmind@x ~/projects/test $ pip install see ... (test) worldmind@x ~/projects/test $ python -c 'import see' 

عند الخروج من المجلد ، يتم تعطيل البيئة الافتراضية:


 (test) worldmind@x ~/projects/test $ cd worldmind@x ~ $ python3 -c 'import see' err>out | fgrep 'NotFound' ModuleNotFoundError: No module named 'see' 

في الوقت نفسه ، يمكنك رؤية المزيد من العمل البشري من خلال إعادة توجيه تدفقات I / O ، الذين لم ينسوا أبدًا كيفية القيام بذلك في جميع أنواع bashs ، دعهم يكونون أول من يعلقون علي.


من أجل الاكتمال ، أود أنه في هذه البيئات الافتراضية ، سيكون من الممكن استخدام نسخة عشوائية من الثعبان ، على سبيل المثال ، مثبتة عبر pyenv ، ولكن حتى الآن لم تنمو معًا ، ولم تصل الأيدي لتصلب.
UPD: منذ وقت ليس ببعيد ، تم تعليم xonsh لاستخدام نسخة عشوائية من الثعبان في البيئات الافتراضية.
قم بتثبيت الإصدار المطلوب من python (قائمة pyenv install --list المتاحة - قائمة):


 pyenv install 3.7.2 

قم بإنشاء بيئة افتراضية معها:


 mkdir projects/projectwith3.7 vox new -p $PYENV_ROOT/versions/3.7.2/bin/python projectwith3.7 

نتحقق من:


 (projectwith3.7) worldmind@x ~/projects/projectwith3.7 $ python --version Python 3.7.2 

أشعل النار


الشيء الوحيد الذي توصلت إليه هو الاختلافات في الهروب :


 find . -name data.txt -exec echo {} \; 

لن تعمل ، لأن هروب الخط المائل العكسي لا يعمل في xonsh والأقواس المتعرجة لها معنى خاص ، تحتاج إلى استخدام علامات الاقتباس ، على سبيل المثال مثل:


 find . -name .xonshrc -exec echo '{}' ';' 

بعض الاختلافات من باش في شكل جدول في الوثائق .


الخلاصة


يبدو لي أن xonsh هو منافس جيد لقشرة المستقبل الطبيعية للجميع ، وخاصة أنه يجب أن يجذب الثعابين. ابدأ في استخدام (التثبيت بدون sudo يجعل من السهل التراجع ، يمكنك ببساطة حذف المجلد) لفهم ما إذا كان كل شيء متاحًا لك شخصيًا ، ربما هذا ما كنت تبحث عنه ، لكنك كنت تخشى التثبيت.


الإضافات في التعليقات


  1. تحديد متغيرات البيئة للمجلدات .
  2. خطافات تنشيط البيئة الافتراضية

Source: https://habr.com/ru/post/ar429892/


All Articles