プログラミングを行うには多くの方法があります。 最も生産的なパラダイムの 1 つは対話型です。REPL (read-eval-print ループ) を使用して、コーディングしながらコードを記述およびテストし、テストしたコードをファイルにコピーします。
LISP 開発環境で生まれた REPL メソッドは、Python プログラミングに適しています。Python には常に優れた対話型開発ツールが備わっているからです。 このスタイルのプログラミングの欠点は、コードを記述したら、テストを個別に取り出してドキュメントを作成し、そのすべてをリポジトリに保存し、パッケージ化して、パッケージとドキュメントを公開する必要があることです。
Donald Knuth のリテラシー プログラミング パラダイムでは、ドキュメントとコードを同じドキュメントに記述し、人間を対象としたドキュメントにコンピュータ向けのコードを散在させることを規定しています。 リテラシー プログラミングは科学プログラミングやデータ サイエンスに広く使用されており、多くの場合、Jupyter Notebook、Jupyter Lab、Visual Studio Code、PyCharm などのノートブック環境が使用されています。 ノートブックの問題の 1 つは、誰にとっても重要ではないメタデータを含め、あまりにも多くの情報を保存するため、リポジトリとうまく連携できない場合があることです。 これは、ノートブックがセル指向であり、Git などのソース コード リポジトリが行指向であるため、マージの競合がある場合に問題を引き起こします。
fast.ai の Jeremy Howard と Hamel Husain は、約 20 人のマイナーな貢献者と共に、Jupyter Notebook が Git でうまく動作することを可能にするだけでなく、非常に生産的なインタラクティブで読み書きのできるプログラミングを可能にする一連のコマンドライン ユーティリティを考え出しました。スタイル。 正しい Python コードを迅速に生成するだけでなく、ドキュメントとテストを同時に生成し、マージの競合による破損を心配することなくすべてを Git に保存し、いくつかのコマンドで PyPI と Conda に公開できます。 これらのユーティリティには学習曲線がありますが、通常は単純にコードを記述するのにかかる時間で開発プロジェクトを完了することができるため、その投資は見返りをもたらします。
下の図でわかるように、nbdev は Jupyter Notebook、GitHub、Quarto、Anaconda、および PyPI で動作します。 このシステムの各部分の機能を要約すると、次のようになります。
- Quarto を使用してドキュメントを生成し、GitHub ページでホストできます。 ドキュメントは LaTeX をサポートし、検索可能で、自動的にハイパーリンクされます。
- パッケージを PyPI と Conda に公開するだけでなく、パッケージのリリースを簡素化するツールも公開できます。 Python のベスト プラクティスが自動的に適用されます。たとえば、エクスポートされたオブジェクトのみが __all__ に含まれます。
- ノートブックとプレーンテキスト ソース コードの間には双方向の同期があり、IDE を使用してコード ナビゲーションやクイック編集を行うことができます。
- 通常のノートブック セルとして記述されたテストは、1 つのコマンドで並列に実行されます。
- テストを実行してドキュメントを再構築する GitHub Actions との継続的な統合があります。
- Jupyter/Git フックを備えた Git フレンドリーなノートブック。不要なメタデータを消去し、マージの競合を人間が判読できる形式でレンダリングします。
nbdev ソフトウェアは、Jupyter Notebook、GitHub、Quarto、Anaconda、および PyPi と連携して、Python 開発用の生産的でインタラクティブな環境を生成します。
nbdev インストール
nbdev は、macOS、Linux、およびほとんどの Unix スタイルのオペレーティング システムで動作します。 Python 3 の最新バージョンが必要です。 M1 MacBook Pro で動作する macOS Ventura で Python 3.9.6 を使用しました。 nbdev は、WSL (Linux 用 Windows サブシステム) の下の Windows で動作しますが、cmd または PowerShell の下では動作しません。 pip または Conda を使用して nbdev をインストールできます。 私はピップを使用しました:
pip install nbdev
これにより、29 個のコマンドライン ユーティリティがインストールされました。 nbdev_help
:
% nbdev_help
nbdev_bump_version Increment version in settings.ini by one
nbdev_changelog Create a CHANGELOG.md file from closed and labeled GitHub issues
nbdev_clean Clean all notebooks in `fname` to avoid merge conflicts
nbdev_conda Create a `meta.yaml` file ready to be built into a package, and optionally build and upload it
nbdev_create_config Create a config file.
nbdev_docs Create Quarto docs and README.md
nbdev_export Export notebooks in `path` to Python modules
nbdev_filter A notebook filter for Quarto
nbdev_fix Create working notebook from conflicted notebook `nbname`
nbdev_help Show help for all console scripts
nbdev_install Install Quarto and the current library
nbdev_install_hooks Install Jupyter and git hooks to automatically clean, trust, and fix merge conflicts in notebooks
nbdev_install_quarto Install latest Quarto on macOS or Linux, prints instructions for Windows
nbdev_merge Git merge driver for notebooks
nbdev_migrate Convert all markdown and notebook files in `path` from v1 to v2
nbdev_new Create an nbdev project.
nbdev_prepare Export, test, and clean notebooks, and render README if needed
nbdev_preview Preview docs locally
nbdev_proc_nbs Process notebooks in `path` for docs rendering
nbdev_pypi Create and upload Python package to PyPI
nbdev_readme None
nbdev_release_both Release both conda and PyPI packages
nbdev_release_gh Calls `nbdev_changelog`, lets you edit the result, then pushes to git and calls `nbdev_release_git`
nbdev_release_git Tag and create a release in GitHub for the current version
nbdev_sidebar Create sidebar.yml
nbdev_test Test in parallel notebooks matching `path`, passing along `flags`
nbdev_trust Trust notebooks matching `fname`
nbdev_update Propagate change in modules matching `fname` to notebooks that created them
nbdev の開発者は、この 90 分間のビデオを見るか、この約 1 時間の書面によるウォークスルーを実行することをお勧めします。 私は両方を行い、さらに多くのドキュメントといくつかのソース コードも読みました。 それぞれから異なる内容を学んだので、最初にビデオを見てからウォークスルーを行うことをお勧めします. 私にとって、ビデオはパッケージのユーティリティについて十分に明確なアイデアを与えてくれて、チュートリアルを進める動機を与えてくれました.
nbdev ウォークスルーを開始する
チュートリアルは、Jupyter Notebook をインストールすることから始まります。
pip install notebook
そして、Jupyter を起動します。
jupyter notebook
最初に新しい端末を作成し、次に端末を使用して nbdev をインストールすることにより、ノートブックでインストールが続行されます。 私が行ったように、すでにシェルでインストールを行っている場合は、そのインストールをスキップできます。
その後、nbdev を使用して Quarto をインストールできます。
nbdev_install_quarto
これには root アクセスが必要なので、パスワードを入力する必要があります。 Quarto のソース コードまたはドキュメントを読んで、安全であることを確認できます。
この時点で、GitHub を参照して空のリポジトリ (リポジトリ) を作成する必要があります。 私はチュートリアルに従い、私のものを nbdev_hello_world と呼び、かなり一般的な説明を追加しました。 レポを作成します。 必要な場合は、手順を参照してください。 次に、リポジトリをローカル マシンに複製します。 手順では、マシンで Git コマンド ラインを使用するように提案されていますが、私は GitHub Desktop を使用するのが好きで、これも問題なく機能しました。
どちらの場合にも、 cd
ターミナルのレポに。 端末をデスクトップで使用するか、ノートブックで使用するかは問題ではありません。 今走る nbdev_new
、これにより、リポジトリに一連のファイルが作成されます。 次に、追加内容をコミットして GitHub にプッシュします。
git add .
git commit -m'Initial commit'
git push
GitHub のリポジトリに戻り、[アクション]タブを開きます。 次のように表示されます。
最初のコミット後の GitHub アクション。 コードをクリーンアップするための継続的インテグレーション (CI) ワークフローと、ドキュメントを投稿するための GitHub ページへのデプロイ ワークフローの 2 つがあります。
オプションの指示に従って、GitHub Pages を有効にします。 次のようになります。
GitHub ページを有効にします。
[アクション]タブを再度開くと、3 番目のワークフローが表示されます。
リポジトリには 3 つのワークフローがあります。 新しいものは Web ドキュメントを生成します。
生成された Web サイト (https://{user}.github.io/{repo}) を開きます。 私のは https://meheller.github.io/nbdev-hello-world/ にあります。 それをコピーして meheller を独自の GitHub ハンドルに変更すると、次のようなものが表示されます。
パッケージの最初の Web ドキュメント ページ。
nbdev ウォークスルーを続ける
今、私たちはついに良いものにたどり着いています。 チェックイン時にノートブックを自動的にクリーンアップする Web フックをインストールします。
nbdev_install_hooks
ライブラリをエクスポートし、
nbdev_export
パッケージをインストールし、
nbdev_export
ドキュメントのプレビュー、
nbdev_preview
(そしてリンクをクリックして) とうとう Python ノートブックの編集を開始します。
jupyter notebook
(nbs をクリックし、00_core.ipynb をクリックします)。
説明に従ってノートブックを編集し、変更を準備します。
nbdev_prepare
説明に従って index.ipynb を編集し、変更を GitHub にプッシュします。
git add .
git commit -m'Add `say_hello`; update index'
git push
必要に応じて、高度な機能をプッシュして追加できます。
チュートリアル終了後の nbdev-hello-world リポジトリ。
これまで見てきたように、特にチュートリアルを自分で実行したことがある場合は、nbdev を使用すると、ノートブックで生産性の高い Python 開発ワークフローを実現でき、GitHub リポジトリと GitHub ページに表示される Quarto ドキュメントをスムーズに操作できます。 まだチュートリアルを完了していない場合は、何を待っていますか?
—
コンタクト: fast.ai、https://nbdev.fast.ai/
費用: Apache License 2.0 に基づく無料のオープン ソース。
プラットフォーム: macOS、Linux、およびほとんどの Unix スタイルのオペレーティング システム。 Windows では WSL で動作しますが、cmd または PowerShell では動作しません。
著作権 © 2023 IDG Communications, Inc.