xonsh-シェルの代替としてのPython

驚くべきことに、ハブには、 xonshgithub )などの非常に興味深いシェルの置き換えに関する投稿がまだありません。優れた構文と他の多くの利点があるため、私の意見では、デフォルトの自動化言語である必要があります。 これがxonshが目指していることです。







私はしばらくの間xonshを使用しているので、使用を開始するのに十分なほど話せると思います。







予約:









xonshの主な機能は、入力されたもの( Python」またはシェルコマンド)を「魔法のように」推測することです。これは非常にうまく機能します。







dogを使用して、Pythonコマンドをシェルコマンドに挿入できます。







私は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]
      
      





ほとんどの場合、PATHの.profile



どこかにバイナリ$HOME/.local/bin



のローカルフォルダーへのパスが追加されていますが、存在する場合にのみ追加されるため、このコードが機能しxonshバイナリができるようにターミナルを再起動する必要があります走って見なければなりませんでした。

更新は標準です:







 pip3 install --user xonsh --upgrade
      
      





venv



対応する機能を使用する場合はvenvを配置します(voxの詳細を参照)。







 sudo apt-get install python3-venv
      
      





すべてのvenvは特定のシェルに対してシャープ化されているため、xonshはvoxと呼ばれる独自のラッパーを提供しますが、快適に使用するにはavox拡張機能をインストールする価値があります







 pip3 install --user xontrib-avox
      
      





Pyenvインストール



任意のバージョンのpythonを使用する仮想環境が必要な場合は、まずpythonをビルドするための依存関係をインストールして、 pyenvのクローンを作成する必要があります。







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





さらに設定例では、pyenvを使用するための環境変数のペアのインストールを確認できます。







打ち上げ



これですべてがインストールされたので、xonshをシェルにします。ユーザーフォルダーの外部で何も変更しないように、bashに次のコード( SOに基づく)を使用します(別のシェルがある場合は、何をすべきか知っていますが、.profileは使用しないでください) 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



モジュールをインポートしました。つまり、シェルで既に使用できるので、必要なモジュールをインポートして、独自の快適な環境を取得できます。







上記のファイルの冒頭は機能を説明するためのものですが、最後の3行では仮想環境を便利に使用できます。その例は後で使用します。







仮想環境を使用する



プロジェクトフォルダーを作成します(avoxはすべてのプロジェクトが$PROJECT_DIRS



ことを想定しています):







 mkdir -p projects/test
      
      





このプロジェクトの仮想環境を作成します。







 vox new test
      
      





構成されたavox



アドオンのおかげで、仮想フォルダーをアクティブにするためにプロジェクトフォルダーに移動するだけavox



奇妙な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'
      
      





同時に、すべての種類のbashでこれを行う方法を決して忘れなかったI / Oストリームのリダイレクトで、より人間的な作業を見ることができます。







完全を期すために、これらの仮想環境では、たとえばpyenvを介してインストールされたpythonの任意のバージョンを使用できるようにしたいと思いますが、これまでのところ一緒成長しておらず、手が届きません。

UPD:少し前まで、xonshは仮想環境で任意のバージョンのpython 使用するように教えられていました。

目的のバージョンのpython(利用可能なpyenv install --list



リスト)を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 '{}' ';'
      
      





bashとのいくつかの違いは、 ドキュメントの表の形式にあります。







おわりに



xonshは、すべての人にとって未来の通常のシェルの優れた候補であり、特にpythonistsにアピールするはずです。 使用を開始します(sudoを使用しないインストールではロールバックが簡単になり、フォルダーを簡単に削除できます)。すべてが個人的に揃っているかどうかを理解します。おそらくこれが探していたのですが、インストールするのが怖かったです。







コメントの追加



  1. フォルダーの環境変数の設定
  2. 仮想環境アクティベーションフック



All Articles