驚くべきことに、ハブには、 xonsh ( github )などの非常に興味深いシェルの置き換えに関する投稿がまだありません。優れた構文と他の多くの利点があるため、私の意見では、デフォルトの自動化言語である必要があります。 これがxonshが目指していることです。
私はしばらくの間xonshを使用しているので、使用を開始するのに十分なほど話せると思います。
予約:
- xonshはPython 3のみに関するものですが、それが標準です。
- xonshはまだリリースされていません(執筆時点ではバージョン0.8.3)、明らかに、開発者によると、望ましい機能のすべてがまだ実装されていませんが、私の考えでは、すべてが機能しています(違いを見ると、以下について)。
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を使用しないインストールではロールバックが簡単になり、フォルダーを簡単に削除できます)。すべてが個人的に揃っているかどうかを理解します。おそらくこれが探していたのですが、インストールするのが怖かったです。