xonsh - python sebagai pengganti shell

Anehnya, di hub masih belum ada posting tentang penggantian shell yang sangat menarik seperti xonsh ( github ), dari sudut pandang saya, sintaksis semua shell sangat mengerikan dan saya tidak melihat alasan untuk menyimpannya di abad ke-21, dan Python, di saya ia memiliki sintaks yang sangat baik dan banyak keuntungan lainnya, oleh karena itu, menurut pendapat saya, itu harus menjadi bahasa otomasi default, yang merupakan apa yang coba dicapai oleh xonsh .


Saya sudah menggunakan xonsh selama beberapa waktu, jadi saya pikir saya bisa membicarakannya cukup untuk mulai menggunakannya.


Pemesanan:


  • xonsh hanya tentang Python 3, tapi itu norma .
  • xonsh belum dirilis (versi 0.8.3 pada saat penulisan), tampaknya, menurut pengembang, belum semua fitur yang diinginkan telah diimplementasikan, tetapi menurut perasaan saya, semuanya berfungsi (jika Anda melihat perbedaannya, kira-kira di bawah).

Fitur utama xonsh adalah "secara ajaib" menebak apa yang Anda masukkan - perintah python atau shell, dan ini bekerja dengan cukup baik.


Anda dapat memasukkan kode python ke perintah shell menggunakan anjing .


Saya tidak akan memikirkan fitur apa saja di xonsh, ini dijelaskan dengan jelas dan jelas dalam dokumentasi dan dalam artikel apa pun, dari sudut pandang saya, cukup bahwa Anda bisa mendapatkan sintaks loop normal di shell:


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

Karena itu, saya akan mencoba untuk fokus pada apa yang tidak dijelaskan atau digambarkan dengan buruk.


Instalasi


Saya akan menjelaskan instalasi (untuk Debian / Ubuntu) yang tidak memerlukan hak akses superuser, meskipun saya baru saja beralih ke skema seperti itu, saya memasukkannya ke folder sistem sebelumnya, menulisnya di /etc/shells dan mengganti shell dengan perintah chsh , tetapi pada awalnya semuanya berfungsi juga dengan metode baru, dan menurut saya lebih tepat, saya tidak ingin menyumbat sistem dengan paket bukan dari repositori, tetapi di sini semua orang memutuskan untuk dirinya sendiri.


Kami memberikan pip jika belum:


 sudo apt-get install python3-pip 

Kami meletakkan xonsh (tanpa sudo), saya memberikan perintah yang menginstal semua dependensi opsional untuk mendapatkan semua roti yang dikandung oleh penulis, jika seseorang menginginkan instalasi minimal, maka Anda dapat menghapus tanda kurung siku dengan konten:


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

Kemungkinan besar Anda sudah memiliki suatu tempat di. .profile di PATH path ke folder lokal dengan binari $HOME/.local/bin ditambahkan, tetapi mereka ditambahkan hanya jika ada, jadi Anda perlu me-restart terminal agar kode ini berfungsi dan biner xonsh harus lari dan melihat.
Pembaruan adalah standar:


 pip3 install --user xonsh --upgrade 

venv


Kami menempatkan venv jika kami ingin menggunakan fungsionalitas yang sesuai (lihat lebih lanjut di vox):


 sudo apt-get install python3-venv 

Semua venv ditajamkan untuk cangkang tertentu, jadi xonsh menawarkan pembungkusnya sendiri yang disebut vox , tetapi untuk penggunaan yang nyaman perlu menginstal ekstensi avox :


 pip3 install --user xontrib-avox 

Instalasi Pyenv


Jika ada kebutuhan untuk lingkungan virtual dengan versi python sewenang-wenang, maka Anda perlu mengkloning pyenv dengan terlebih dahulu menginstal dependensi untuk membangun python :


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

Lebih lanjut dalam contoh konfigurasi, Anda dapat melihat instalasi sepasang variabel lingkungan untuk menggunakan pyenv.


Luncurkan


Sekarang kita telah menginstal semuanya dan masih membuat xonsh menjadi shell, agar tidak mengubah apa pun di luar folder pengguna, saya menggunakan kode berikut (berdasarkan SO ) untuk bash (jika Anda memiliki shell lain, maka Anda tahu apa yang harus dilakukan, tetapi jangan gunakan .profile sejak xonsh membacanya juga) ditambahkan ke .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 

Kami me-restart shell dan, jika semuanya berjalan dengan baik, Anda sudah di xonsh i.e. pada kenyataannya, di konsol python dan Anda dapat, misalnya, melakukan perhitungan langsung pada baris perintah, misalnya, mencari tahu berapa banyak 2+2 akan.


Kustomisasi


Sebelum mulai menggunakannya, Anda harus membuat file konfigurasi .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 

Mulai ulang shell untuk menerapkan pengaturan baru.


Perlu memperhatikan model data manusia - alias adalah kamus, cara daftar, tampaknya jelas, tetapi untuk beberapa alasan tidak selalu seperti itu.
Kami juga mengimpor modul os di konfigurasi, yang berarti sudah tersedia di shell kami, sehingga Anda dapat mengimpor modul yang diperlukan dan mendapatkan lingkungan Anda sendiri yang nyaman.


Awal dari file di atas lebih untuk menunjukkan kemampuan, tetapi tiga baris terakhir memungkinkan Anda untuk dengan mudah menggunakan lingkungan virtual, contoh yang digunakan nanti.


Menggunakan lingkungan virtual


Buat folder proyek (avox mengharapkan bahwa semua proyek dalam $PROJECT_DIRS ):


 mkdir -p projects/test 

Buat lingkungan virtual untuk proyek ini:


 vox new test 

Berkat add- avox dikonfigurasi avox kita hanya perlu pergi ke folder proyek untuk mengaktifkan lingkungan virtual, source ./bin/activate tidak perlu melakukan source ./bin/activate aneh 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' 

Setelah keluar dari folder, lingkungan virtual dinonaktifkan:


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

Pada saat yang sama, Anda dapat melihat lebih banyak pekerjaan manusia dengan mengarahkan ulang aliran I / O , yang tidak pernah lupa bagaimana melakukan ini di semua jenis pesta, biarkan mereka menjadi yang pertama memberikan komentar kepada saya.


Demi kelengkapan, saya ingin itu di lingkungan virtual ini akan mungkin untuk menggunakan versi python sewenang-wenang, misalnya, diinstal melalui pyenv, tetapi sejauh ini belum tumbuh bersama , dan tangan belum mencapai untuk mengeraskan diri.
UPD: Belum lama ini, xonsh diajari untuk menggunakan versi python sewenang-wenang dalam lingkungan virtual.
Instal versi python yang diinginkan (daftar pyenv install --list tersedia pyenv install --list ):


 pyenv install 3.7.2 

Buat lingkungan virtual bersamanya:


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

Kami memeriksa:


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

Menyapu


Satu-satunya hal yang saya temukan adalah perbedaan dalam melarikan diri :


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

tidak akan bekerja, karena pelarian backslash tidak bekerja di xonsh dan kurung kurawal memiliki arti khusus, Anda perlu menggunakan tanda kutip, misalnya seperti ini:


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

Beberapa perbedaan dari bash adalah dalam bentuk tabel dalam dokumentasi .


Kesimpulan


Sepertinya saya bahwa xonsh adalah penantang yang baik untuk cangkang normal di masa depan untuk semua, dan terutama itu harus menarik bagi pythonists. Mulai menggunakan (instalasi tanpa sudo memudahkan untuk memutar kembali, Anda cukup menghapus folder) untuk memahami jika semuanya ada untuk Anda secara pribadi, mungkin ini yang Anda cari, tetapi takut untuk menginstal.


Penambahan di komentar


  1. Mengatur variabel lingkungan untuk folder .
  2. Kait Aktivasi Lingkungan Virtual

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


All Articles