4

私はPythonパッケージを書いています。パッケージは、そのバージョン番号を内部的に認識している必要があります。また、このバージョンを のsetup.pyスクリプトに含める必要がありますdistutils

バージョン番号を2つの別々の場所で維持する必要がないように、これを行う最良の方法は何ですか? ライブラリの残りの部分からスクリプトをインポートしたくありませんsetup.py(これはばかげているようです)。また、スクリプトからライブラリをインポートしたくありませんsetup.py(同様に)。理想的には、キーワードを設定するだけで、svnそれが自動的にファイルに置き換えられますが、それは では不可能のようですsvn。両方の場所でバージョン番号を含む共通のテキスト ファイルを読み取ることができましたが、これが最善の解決策でしょうか?

明確にするために: バージョン番号を1か所で管理したい。はい、変数をパッケージに入れ、さらにsetup.pyファイルに入れることができました。しかし、その後、必然的に同期が外れます。

4

4 に答える 4

5

メインパッケージの中には、おそらくありますよ__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
于 2009-03-10T19:50:52.073 に答える
0

バージョンをPythonパッケージに埋め込む標準的な方法も参照してください。これは、バージョン情報を1つの場所(という名前のファイル_version.py)から他のコードがそれを探す場所(たとえば、名前付きの属性__version__PEP 0345メタデータ)に伝播する方法に関するものです。

次に、リビジョン管理履歴からファイルを生成するBrianWarnerの新しい「versioneer」ツールを参照してください。_version.py

また、 Pythonパッケージにバージョンを埋め込むための標準的な方法に対する私の答えを確認してください。、セットアップスクリプトからモジュールをインポートする問題を回避する方法があることに気付く人が多ければ多いほどよいでしょう。

于 2012-01-16T15:45:55.903 に答える
0

私のプロジェクトでも同様の問題がありました。build.pyというトップレベルのテスト/ビルド/パッケージ/デプロイ スクリプトを作成しました(distutils ベースではありません)。一元化されたバージョン番号を含むプロパティ ファイルを読み取ります。setup.py ファイルを直接管理する代わりに、代わりにテンプレート ファイルを保持し、build.py スクリプトがそれを読み取り、バージョン変数を props ファイルの値に置き換えてから、setup.py スクリプトを書き出します。次に、スクリプト ファイルがそれを実行し、パッケージを生成するか、pypi にアップロードします。

于 2009-03-10T20:14:27.367 に答える
0

パッケージ内に setup スクリプトをインポートするのはばかげています (特に、ライブラリがインストールされた後に存在しなくなる可能性があるため) が、setup.py 内にライブラリをインポートすることは問題ありません。別のテキスト ファイルでも機能しますが、実行時にバージョン番号にアクセスする場合は、パッケージと共にテキスト ファイルをインストールする必要があるという問題があります。

于 2009-03-10T20:04:51.400 に答える