setup.py とパッケージのバージョンを共有する正しい方法は何ですか?
2023-11-21 09:55:02
質問
と
distutils
,
setuptools
など。パッケージのバージョンは
setup.py
:
# file: setup.py
...
setup(
name='foobar',
version='1.0.0',
# other attributes
)
パッケージ内から同じバージョン番号にアクセスできるようにしたいのですが。
>>> import foobar
>>> foobar.__version__
'1.0.0'
私は
__version__ = '1.0.0'
を私のパッケージの __init__.py に追加することもできますが、パッケージへの簡略化されたインタフェースを作成するために、私のパッケージに追加のインポートを含めたいと思います。
# file: __init__.py
from foobar import foo
from foobar.bar import Bar
__version__ = '1.0.0'
と
# file: setup.py
from foobar import __version__
...
setup(
name='foobar',
version=__version__,
# other attributes
)
しかし、これらの追加インポートにより、インストール時に
foobar
のインストールに失敗する可能性があります。setup.pyとパッケージのバージョンを共有する正しい方法は何でしょうか?
どのように解決するのですか?
バージョンを
setup.py
だけで、自分のバージョンを読むには
pkg_resources
で、事実上
setuptools
メタデータを問い合わせることになります。
ファイルを作成します。
setup.py
setup(
name='foobar',
version='1.0.0',
# other attributes
)
ファイルを作成します。
__init__.py
from pkg_resources import get_distribution
__version__ = get_distribution('foobar').version
これをインストールせずに実行することになるすべてのケースで動作させるために、以下のようにテストしてください。
DistributionNotFound
と配布場所をテストします。
from pkg_resources import get_distribution, DistributionNotFound
import os.path
try:
_dist = get_distribution('foobar')
# Normalize case for Windows systems
dist_loc = os.path.normcase(_dist.location)
here = os.path.normcase(__file__)
if not here.startswith(os.path.join(dist_loc, 'foobar')):
# not installed, but there is another version that *is*
raise DistributionNotFound
except DistributionNotFound:
__version__ = 'Please install this project with setup.py'
else:
__version__ = _dist.version
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] 億の相対的輸入
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み] pipでどのバージョンのパッケージがインストールされているかを調べる
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Pythonパッケージにバージョンを埋め込む標準的な方法?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] バブルソートの宿題
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?