SVNとdistutilsを使用してPythonパッケージにバージョン番号を割り当てるにはどうすればよいですか?
質問
Pythonパッケージを作成しています。パッケージは内部でバージョン番号を知る必要がありますが、このバージョンは distutils
の setup.py
スクリプトにも含まれています。
これを行う最良の方法は何ですか?したがって、バージョン番号を2つの別々の場所で維持する必要はありませんか?ライブラリの他の部分から setup.py
スクリプトをインポートしたくない(それはかなり馬鹿げているように見える)し、 setup.py <からライブラリをインポートしたくない/ code>スクリプト(同様)。理想的には、
svn
にキーワードを設定して、それを自動的にファイルに置き換えますが、それは svn
では不可能なようです。両方の場所にバージョン番号を含む共通のテキストファイルを読むことができました。これが最良の解決策ですか?
明確にするため:バージョン番号を 1つの場所に維持したい。はい、変数をパッケージに入れ、再び setup.py
ファイルに入れます。しかし、その後、必然的に同期が外れます。
解決
メインパッケージの内部には、おそらく __ init __。py
がありますか?
ディレクトリ構造:
> ./packageTest
> ./packageTest/__init__.py
> ./packageTest/setup.py
__ init __。py
ファイル内に、次の行を追加します。
# package directory __init__.py
__version__ = 1.0
setup.pyファイル:
# setup.py
from packageTest import __version__
...
パッケージディレクトリからインポートするモジュールで(packageTestを呼び出します)、これを行うことができます:
from packageTest import setup
print 'Setup.py version:', setup.__version__
# prints Setup.py version: 1.0
他のヒント
セットアップスクリプトをパッケージ内にインポートするのはばかげています(特に、ライブラリのインストール後は存在しない可能性があるため)。ただし、setup.py内にライブラリをインポートすることは問題ありません。 別のテキストファイルでも機能しますが、実行時にバージョン番号にアクセスする場合は、パッケージにテキストファイルをインストールする必要があるという問題があります。
プロジェクトで同様の問題が発生しました。 build.py (distutilsベースではありません、気にしないでください)。 プロパティファイル、一元化されたバージョン番号が含まれます。 setup.pyファイルを直接維持する代わりに、テンプレートファイル、そしてbuild.pyスクリプトがそれを読み込み、バージョン変数をpropsファイルからの値に置き換えてから、setup.pyスクリプトを書き出します。次に、スクリプトファイルがそれを実行し、パッケージを生成するか、pypiにアップロードします。
バージョンをPythonパッケージに埋め込む標準的な方法も参照してくださいバージョン情報を1つの場所( _version.py
という名前のファイル)から他のコードが検索する場所(たとえば、 __ version __ という名前の属性code>および
PEP 0345
メタデータ)。
次に、Brian Warnerの新しい&quot; versioneer&quot;を参照してください。リビジョン管理履歴から _version.py
ファイルを生成するツール。
また、バージョンをPythonパッケージに埋め込む標準的な方法への私の答えをチェックしてください。設定スクリプトからモジュールをインポートする問題を回避する方法があります。