والمثير للدهشة ، على المحور ، أنه لا يوجد حتى الآن أي منشور حول مثل هذا الغلاف المثير للاهتمام للغاية مثل 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 يجعل من السهل التراجع ، يمكنك ببساطة حذف المجلد) لفهم ما إذا كان كل شيء متاحًا لك شخصيًا ، ربما هذا ما كنت تبحث عنه ، لكنك كنت تخشى التثبيت.
الإضافات في التعليقات
- تحديد متغيرات البيئة للمجلدات .
- خطافات تنشيط البيئة الافتراضية