私はプログラマーというよりは学者であり、研究をサポートするために、私自身が使用するPythonプログラムを長年書いています。私の最新のプロジェクトは、私だけでなく他の多くの人にとっても有用である可能性が高く、オープンソースのPythonライブラリとしてリリースすることを考えています。
ただし、機能している個人プロジェクトから、他の人が簡単にインストールして使用できるライブラリに移行するには、かなりのハードルがあるようです。この質問は、パブリックリリースに向けて作業を開始するために最初に実行する必要がある手順に関するものです。
現在、ライブラリとライブラリ自体を使用するコードを含む単一のgitリポジトリがあり、何かが壊れた場合に備えてgitを緊急の元に戻すボタンとして使用しています。これはすべて単一のユーザーには問題なく機能しますが、リリースしたい場合は明らかに適切ではありません。最後にしたいのは、ライブラリが別のリポジトリにあり、他の人がを使用してインストールできpip
、安定したAPIがあることです。
setuptoolsなどを使用することを学習するのは、一度公開したいと思ったらそれほど難しいことではないでしょう。私の問題は、そのポイントに到達するためにどのように作業すべきかを知ることです。
だから私の質問は、公共の消費のためにPythonライブラリプロジェクトの準備を始めるためにとるべき最初のステップは何ですか?ライブラリの公開に向けて作業を開始するには、ディレクトリ構造、gitリポジトリなどをどのように再編成すればよいですか?
より一般的には、これを初めて試すときに役立つと知られているリソースがある場合、非常に役立ちます。ベストプラクティスや回避すべき間違いなどへのポインタも非常に役立ちます。
いくつかの明確化:現在の回答は、「Pythonライブラリを他の人が使用できるようにするにはどうすればよいですか?」という行に沿った質問に対処しています。これは便利ですが、私が尋ねるつもりの質問とは異なります。
私は現在、プロジェクトのリリースに向けて長い旅の始まりにいます。私の実装の中核は機能します(そして非常にうまく機能します)が、先の作業量に圧倒されており、プロセスをナビゲートする方法についてのガイダンスを探しています。例えば:
現在、私のライブラリコードは、それを使用する独自のドメイン固有のコードに結合されています。サブフォルダーに存在し、同じgitリポジトリーを共有します。最終的には、スタンドアロンのライブラリにして独自のリポジトリに配置する必要がありますが、その方法がわからないため、これを先延ばしにしています。(ライブラリを「開発モード」でインストールして編集できるようにする方法も、2つのgitリポジトリを同期させる方法もありません。)
私のドキュメント文字列は簡潔です。最終的にはSphinxまたは他のツールを使用する必要があることを知っているからです。しかし、これらのツールは学ぶのが簡単ではないようですので、これは主要なサブプロジェクトになります。
ある時点で、setuptoolsまたは他のツールを使用してパッケージ化し、依存関係を追跡する方法を学ぶ必要がありますが、これは非常に複雑です。今すぐこれを行う必要があるかどうかはわかりませんが、ドキュメントは新しいユーザーにとって絶対的な迷路なので、後で行うことを決め続けています。
体系的なテストを行う必要はありませんでしたが、このプロジェクトには間違いなく取り組むので、(i)自分のプロジェクトに適した方法論を知るためにテストについて十分に学ぶ必要があります。(ii)選択した方法論で利用可能なツールを学習します。(iii)選択したツールの使用方法を学ぶ。(iv)プロジェクトにテストスイートなどを実装します。これはそれ自体がプロジェクトです。
他にもやらなければならないことがあるかもしれません。たとえば、jonrsharpeは、git-flow、tox、TravisCI、virtualenv、CookieCutterについての役立つリンクを投稿しました。(投稿は2013年からのものであるため、現在どれだけ残っているかを調べるためにいくつかの作業を行う必要があります。)
これをすべてまとめると、膨大な量の作業が必要になりますが、プラグインを続けて行けば、すべてを完了することができると確信しており、急いでいません。私の問題は、それを1つずつ実行できる管理可能な手順に分解する方法を知ることです。
言い換えれば、最終的にリリース可能な製品に到達するために、私が今取ることができる最も重要な具体的なステップはどれかを尋ねています。週末が空いている場合、これらのうちどれに焦点を当てるべきですか?他の作業とは別に(もしあれば)どの作業を行うことができますか?これらのことを学習する最も効率的な方法は何ですか?それで、プロジェクト自体に集中する時間を確保できますか?(これは基本的に趣味のプロジェクトであり、私の仕事ではないことを心に留めておいてください。)実際に行う必要のないことはありますか?したがって、膨大な時間と労力を節約できますか?
すべての回答は大歓迎ですが、これらのプロジェクト管理の側面に焦点を当てた回答、特に現代のPython開発に特に関連した回答を歓迎します。