私はプログラマーではなくアカデミックであり、自分の研究をサポートするためにPython自分用のプログラムを作成してきた長年の経験があります。私の最新のプロジェクトは他の多くの人に役立つ可能性があります私と同様、私はそれをオープンソースのPythonライブラリとしてリリースすることを考えています。
ただし、機能している個人プロジェクトから、他のユーザーが簡単にインストールして使用できるライブラリに移行するには、かなりのハードルがあるようです。この質問は、公開リリースに向けて作業を開始するために私が取るべき最初のステップについてです。
現在、ライブラリとライブラリ自体を使用するコードを含む単一のgitリポジトリがあり、何かが壊れた場合の緊急の取り消しボタンとしてgitを使用しています。これはすべて1人のユーザーには問題なく機能しますが、リリースしたい場合は明らかに適切ではありません。結局のところ、私のライブラリは別のリポジトリにあり、pip
を使用して他のユーザーがインストールでき、安定したAPIを持っています。
公開したいと思った段階で、setuptoolsなどの使い方を学ぶのはそれほど難しいことではないでしょう-私の問題は、その時点に到達するためにどのように作業すべきかを知ることです。
だから私の質問は、Pythonライブラリプロジェクトを一般消費のために準備するために最初に取るべきステップは何ですか?ディレクトリ構造、gitリポジトリなどをどのように再編成する必要がありますか?ライブラリのリリースの公開に向けて作業を開始しますか?
より一般的には、これを初めて試すときに役立つことがわかっているリソースがあれば非常に役立ちます。ベストプラクティスや回避すべき間違いなどへのポインタも非常に役立ちます。
いくつかの明確化:現在の回答は、「どうすれば自分のPythonライブラリa他の人が使うのに良いものですか?」これは便利ですが、私が尋ねようとした質問とは異なります。
私は現在、プロジェクトのリリースに向けた長い旅のstartにいます。私の実装のコアは機能します(そして非常にうまく機能します)が、私は自分の前の作業量に圧倒されており、プロセスをナビゲートする方法に関するガイダンスを探しています。例えば:
私のライブラリコードは現在、それを使用する私のドメイン固有のコードに結合されています。サブフォルダーに存在し、同じgitリポジトリを共有します。最終的には、スタンドアロンライブラリにして独自のリポジトリに配置する必要がありますが、方法がわからないため、先延ばしにしています。 (ライブラリを「開発モード」でインストールして編集できるようにする方法も、2つのgitリポジトリを同期させる方法もありません。)
最終的にはSphinxまたは他のツールを使用する必要があることを知っているので、私のdocstringは簡潔です。しかし、これらのツールは習得が簡単ではないようです。そのため、これは主要なサブプロジェクトになり、延期しています。
ある時点で、setuptoolsまたは他のツールを使用してパッケージ化し、依存関係を追跡することを学ぶ必要があります。これは非常に複雑です。これを今すぐ行う必要があるかどうかはわかりません。また、ドキュメントは新しいユーザーにとって絶対的な迷路であるため、後で行うことにします。
私は体系的なテストを行う必要がありませんでしたが、私はこのプロジェクトのために間違いなくそうするでしょう。 (ii)選択した方法論に使用できるツールを学ぶ。 (iii)選択したツールの使用方法を学ぶ。 (iv)プロジェクトにテストスイートなどを実装します。これはそれ自体がプロジェクトです。
私がやらなければならないことが他にもあるかもしれません。たとえば、jonrsharpeは、git-flow、tox、TravisCI、virtualenv、およびCookieCutterについて言及する helpful link を投稿しました。 (投稿は2013年のものなので、どれだけがまだ最新であるかを確認するために、いくつかの作業も行う必要があります。)
これをすべて組み合わせると、大変な作業になりますが、差し込み続ければ、すべて完了できると確信しており、急いでいません。私の問題は、それを1つずつ実行できる管理可能な手順に分割する方法を知ることです。
つまり、最終的にリリース可能な製品に到達するために、私が現在実行できる最も重要な具体的な手順はどれか、ということです。無料の週末がある場合、これらのうちどれに焦点を当てるべきですか?他に分離して実行できるものがある場合は、どれを実行すれば、すべてを実行する必要なく、少なくとも1つのステップを実行できますか?これらのことを学ぶ最も効率的な方法は何ですか?プロジェクト自体に集中する時間があるのですか? (これはすべて、本質的に趣味のプロジェクトであり、私の仕事ではないことを覚えておいてください。)私が実際に行う必要のないことはありますか。膨大な時間と労力?
すべての回答は大歓迎ですが、特にPython開発についての最新情報を参照しながら、これらのプロジェクト管理の側面に焦点を当てた回答を歓迎します。
ライブラリを使用する場合、必要に応じてsetup.pyを追加することは最も重要なステップではありません。さらに重要なことは、ドキュメントを追加してライブラリを宣伝することです。 2番目のポイントはライブラリに強く依存するため、ドキュメントの側面に重点を置いて説明します。
あなたはあなたの図書館についてすべてを知っています。そして、これには問題があります。あなたはすでにインストール方法と使用方法を知っているので、多くのことが直感的または明白に見えるかもしれません。残念ながら、同じことはユーザーにとって明白でも直感的でもないかもしれません。自分のライブラリを何も知らないかのように見てみてください。さらに重要なこととして、他の人にライブラリを使用してもらい、彼らが抱えていたすべての困難を見つけるようにしてください。
図書館について、わかりやすい英語で説明します。あまりにも多くのライブラリーは、誰もがそれらについて知っていると想定しています。そうでない場合、ライブラリの目的が何であるかを理解するのは難しいかもしれません。
詳細な技術文書を書くだけでなく、ライブラリでいくつかのタスクを実行する方法を示す短いコードを忘れないでください。ほとんどの開発者は急いでおり、基本的なことを行う方法を理解するために何時間も費やす必要がある場合、他のライブラリに切り替える傾向があります。
連絡先情報を含めます。ライブラリが成功した場合(そして、私自身の経験によると、これはかなり未知のライブラリでも同様であることがわかりました)、人々はライブラリに問題を感じるでしょう:バグか、単にライブラリの一部を理解または使用することが困難です。多くの場合、フィードバックを受け取ってライブラリを改善すると便利です。問題を報告したすべての人にとって、問題が発生したときに別のライブラリに切り替えることを好む人が数百人いる可能性があります。
それに加えて:
ライブラリがPython 2または3または両方で動作するかどうかを明確にします。
ライブラリがWindowsで機能しない場合は、そのようにしてください。
必ず公式の規則を使用してください(確認するには、pep8を使用してください)。そうでない場合は、明確に説明するか修正してください。
Edgeケースの取り扱いに注意してください。ライブラリが間違ったタイプまたはサポートされていない値で呼び出された場合、それは、明白な英語で正確に何が間違っているかを示す必要があります。すべきではないことは、不可解な例外をスタックの10レベル下に上げ、ユーザーに何が問題かを理解させることです。
これらは素晴らしい質問です。
リリース可能なライブラリに向けた重要な具体的な段階的ステップについて:
../library
を介して参照できるようにします。pytest
を使用して単体テストの作成を開始します。リリースを作成するずっと前に、単体テストは、独自の開発でコーナーケースのバグを見つけ、コードの変更によって問題が解決されなかったという確信を提供することで報われます。繰り返しますが、これは時間をかけて構築することができます。始めるのはとても簡単です。README.md
ドキュメントファイルと、ライセンスファイルを使用して、適切な処理を行います。おそらく、あなたは自分の分野で成熟したOSSプロジェクトを見つけ、そのプロジェクトにコードを寄稿することができますか?次のようないくつかの利点があります。
あなたが気に入って、おそらく使用する可能性のある関連するOSSプロジェクトがある場合は、問題やプルリクエストを開いたり、メンテナと連絡を取ったりしてみませんか? (開始する良い方法は、既存の問題を解決することかもしれません。)
2019年です。最新のツールから始めることを強くお勧めします。 setup.py
は必要ありません。これはPythonコミュニティの人々が排除したいと考えているものであり、最終的にはそうすると思います。
詩 を試してみてください、あなたはそれを後悔しません。
これはあなたが尋ねている複雑な質問であり、私は完全に同意します Arseniの答え 。優れたドキュメントは非常に重要な側面です。いくつかの簡単な手順でライブラリを起動して実行できなかった場合は、そのままドロップします(実際に試してみたいと思わない限り)。
あなたが間違いなく検討するいくつかのこと
私はPythonに関連した経験がないので、その方向についてのヒントを与えることはできません。ただし、リモートリポジトリでの各コミットによってトリガーされるすべてのテストを自動化することは可能です(つまり、 Jenkins を使用)。ただし、これは延期することをお勧めします。これは、事前の経験なしに設定するのは多くの作業だからです。
長年にわたって成熟したライブラリよりかなり少ない数のライブラリを使用してきたことで、導入ツールを選択した後の重要なアドバイスは次のとおりです。
ライブラリの依存関係を特定します。
整理コンテナーまたはVMのいずれかのクリーンな環境へのデプロイメントを試みます。問題を引き起こす個人的な環境には独特のものがしばしばあるため、このステップは非常に重要であると考えています。
誰が将来ライブラリを保守するかを検討します。誰かのペットプロジェクトであったライブラリを3〜4年間使用していて、最新の状態に保つために必要な更新を取得できないことほど不満はありません。
あなたまたはあなたのチームがライブラリのテストと文書化を継続することを約束するかどうかを検討してください(単体テストとCIパイプラインはここで方程式の一部になり始めます)。