kullanılması setuptools
vepbr
Sürümü yönetmenin standart bir yolu yoktur, ancak paketlerinizi yönetmenin standart yolu budur setuptools
.
Sürümü yönetmek için genel olarak bulduğum en iyi çözüm setuptools
, pbr
uzantı ile kullanmaktır . Bu benim standart sürüm yönetim biçimim.
Projenizi tam paketleme için kurmak basit projeler için aşırı olabilir, ancak sürümü yönetmeniz gerekiyorsa, her şeyi ayarlamak için muhtemelen doğru seviyededir. Bunu yapmak, paketinizi PyPi'de serbest bırakılabilir hale getirir, böylece herkes Pip ile indirip kullanabilir.
PBR, çoğu meta veriyi setup.py
araçların dışına çıkarır ve setup.cfg
daha sonra çoğu meta veri için kaynak olarak kullanılan ve sürüm içerebilen bir dosyaya taşır . Bu, meta verilerin pyinstaller
gerektiğinde benzer bir şey kullanılarak yürütülebilir bir dosyaya paketlenmesini sağlar (eğer öyleyse, muhtemelen bu bilgiye ihtiyacınız olacaktır ) ve meta verileri diğer paket yönetimi / kurulum komut dosyalarından ayırır. Sürüm dizesini doğrudan setup.cfg
manuel olarak güncelleyebilirsiniz ;*.egg-info
paket sürümlerinizi oluştururken . Komut dosyalarınız daha sonra çeşitli yöntemler kullanarak meta verilerden sürüme erişebilir (bu işlemler aşağıdaki bölümlerde açıklanmıştır).
Git'i VCS / SCM için kullanırken, bu kurulum daha da iyidir, çünkü Git'ten birçok meta veri çeker, böylece deponuz sürüm, yazarlar, değişiklik günlükleri, Özellikle sürüm için, repo'daki git etiketlerini temel alan geçerli işlem için bir sürüm dizesi oluşturur.
PBR sürüm, yazar, changelog ve diğer bilgileri doğrudan git deponuzdan çekeceğinden setup.cfg
, paketiniz için bir dağıtım oluşturulduğunda (kullanaraksetup.py
)
Gerçek zamanlı geçerli sürüm
setuptools
aşağıdakileri kullanarak en son bilgileri gerçek zamanlı olarak çeker setup.py
:
python setup.py --version
Bu, en son sürümü, setup.cfg
dosyada veya git deposundan, en son yapılan işleme ve depoda bulunan etiketlere göre alır. Bu komut bir dağıtımdaki sürümü güncellemez.
Sürümü güncelleme
setup.py
(Örneğin py setup.py sdist
,) ile bir dağıtım oluşturduğunuzda , geçerli bilgilerin tümü çıkarılır ve dağıtımda saklanır. Bu esas olarak setup.py --version
komutu çalıştırır ve daha sonra bu sürüm bilgilerini package.egg-info
dağıtım meta verilerini depolayan bir dosya kümesindeki klasöre depolar.
Sürüm meta verilerini güncelleme işlemi hakkında not:
Sürüm verilerini git'ten almak için pbr kullanmıyorsanız, setup.cfg dosyanızı doğrudan yeni sürüm bilgileriyle güncelleyin (yeterince kolay, ancak bunun sürüm işleminizin standart bir parçası olduğundan emin olun).
Git kullanıyorsanız ve bir kaynak veya ikili dağıtım oluşturmanız gerekmiyorsa ( komutlardan python setup.py sdist
birini veya python setup.py bdist_xxx
komutlardan birini kullanarak ) git repo bilgilerini <mypackage>.egg-info
meta veri klasörünüze güncellemenin en basit yolu python setup.py install
komutu çalıştırmaktır . Bu, git repo'dan meta verileri çekme ile ilgili tüm PBR işlevlerini çalıştıracak ve yerel .egg-info
klasörünüzü güncelleyecek, tanımladığınız giriş noktaları için komut dosyası yürütülebilir dosyaları ve bu komutu çalıştırdığınızda çıktıdan görebileceğiniz diğer işlevleri yükleyecektir.
O Not .egg-info
klasörü genelde Git saklanmasını hariçtir standart Python kendini Repo .gitignore
(örneğin itibaren dosyalar Gitignore.IO sizin kaynağından üretilebilir olarak). Hariç tutulursa, meta verileri yayınlanmadan önce yerel olarak güncellemek için standart bir "yayınlama işlemine" sahip olduğunuzdan emin olun ve PyPi.org'a yüklediğiniz veya başka bir şekilde yüklediğiniz paketlerin doğru sürüme sahip olması için bu verileri içermesi gerekir. İsterseniz Git (yani ilave edersen göz ardı ediliyor belirli dosyaları hariç tutabilirsiniz bu bilgiyi içerecek şekilde Repo !*.egg-info/PKG_INFO
için .gitignore
)
Bir komut dosyasından sürüme erişme
Meta verilere, paketin kendisindeki Python komut dosyalarındaki mevcut derlemeden erişebilirsiniz. Sürüm için, örneğin, şimdiye kadar buldum bunu yapmanın birkaç yolu vardır:
## This one is a new built-in as of Python 3.8.0 should become the standard
from importlib-metadata import version
v0 = version("mypackage")
print('v0 {}'.format(v0))
## I don't like this one because the version method is hidden
import pkg_resources # part of setuptools
v1 = pkg_resources.require("mypackage")[0].version
print('v1 {}'.format(v1))
# Probably best for pre v3.8.0 - the output without .version is just a longer string with
# both the package name, a space, and the version string
import pkg_resources # part of setuptools
v2 = pkg_resources.get_distribution('mypackage').version
print('v2 {}'.format(v2))
## This one seems to be slower, and with pyinstaller makes the exe a lot bigger
from pbr.version import VersionInfo
v3 = VersionInfo('mypackage').release_string()
print('v3 {}'.format(v3))
__init__.py
Sürüm bilgilerini aşağıdaki gibi diğer bazı yanıtlara benzer şekilde çıkarmak için bunlardan birini doğrudan paketinize koyabilirsiniz :
__all__ = (
'__version__',
'my_package_name'
)
import pkg_resources # part of setuptools
__version__ = pkg_resources.get_distribution("mypackage").version