का उपयोग कर setuptools
औरpbr
संस्करण को प्रबंधित करने का कोई मानक तरीका नहीं है, लेकिन आपके पैकेज को प्रबंधित करने का मानक तरीका है setuptools
।
संस्करण को प्रबंधित करने के लिए मुझे जो सबसे अच्छा समाधान मिला है वह है इसका उपयोग setuptools
करनाpbr
विस्तार के । यह अब मेरे संस्करण प्रबंधन का मानक तरीका है।
पूर्ण पैकेजिंग के लिए अपनी परियोजना स्थापित करना सरल परियोजनाओं के लिए ओवरकिल हो सकता है, लेकिन यदि आपको संस्करण का प्रबंधन करने की आवश्यकता है, तो आप शायद सब कुछ सेट करने के लिए सही स्तर पर हैं। ऐसा करने से आपका पैकेज PyPi पर निर्भर हो जाता है हो ताकि हर कोई इसे Pip के साथ डाउनलोड और उपयोग कर सके।
PBR अधिकांश मेटाडेटा को setup.py
उपकरण से बाहर ले जाती है और एक setup.cfg
फ़ाइल में जिसे तब अधिकांश मेटाडेटा के लिए एक स्रोत के रूप में उपयोग किया जाता है, जिसमें संस्करण शामिल हो सकते हैं। यह मेटाडेटा को निष्पादन योग्य में पैक करने की अनुमति देता है जैसे pyinstaller
यदि आवश्यक हो (यदि ऐसा है, तो आपको शायद इस जानकारी की आवश्यकता होगी ), और मेटाडेटा को अन्य पैकेज प्रबंधन / सेटअप स्क्रिप्ट से अलग करता है। आप setup.cfg
मैन्युअल रूप से संस्करण स्ट्रिंग को सीधे अपडेट कर सकते हैं , और यह *.egg-info
आपके पैकेज रिलीज के निर्माण के दौरान फ़ोल्डर में खींच लिया जाएगा । आपकी स्क्रिप्ट तब विभिन्न तरीकों का उपयोग करके मेटाडेटा से संस्करण तक पहुंच सकती है (ये प्रक्रिया नीचे दिए गए अनुभागों में उल्लिखित हैं)।
वीसीएस / एससीएम के लिए गिट का उपयोग करते समय, यह सेटअप और भी बेहतर है, क्योंकि यह गिट से बहुत सारे मेटाडेटा में खींच लेगा, ताकि आपका रेपो मेटाडेटा के कुछ के लिए आपके सत्य का प्राथमिक स्रोत हो सकता है, जिसमें संस्करण, लेखक, चेंजलॉग्स शामिल हैं, आदि विशेष रूप से संस्करण के लिए, यह रेपो में git टैग के आधार पर वर्तमान प्रतिबद्ध के लिए एक संस्करण स्ट्रिंग बनाएगा।
जैसा कि पीबीआर आपके गिट रेपो से सीधे संस्करण, लेखक, चैंज और अन्य जानकारी को खींच लेगा, इसलिए setup.cfg
जब भी आपके पैकेज के लिए वितरण का उपयोग किया जाता है तो कुछ मेटाडेटा को छोड़ दिया जा सकता है और ऑटो उत्पन्न किया जा सकता है (उपयोग करते हुए setup.py
)
वास्तविक समय वर्तमान संस्करण
setuptools
वास्तविक समय का उपयोग करके नवीनतम जानकारी खींचेंगे setup.py
:
python setup.py --version
यह नवीनतम संस्करण को या तो setup.cfg
फ़ाइल से, या गिट रेपो से, नवीनतम प्रतिबद्ध के आधार पर खींचेगा जो कि बनाया गया था और टैग जो रेपो में मौजूद हैं। यह आदेश वितरण में संस्करण को अद्यतन नहीं करता है।
संस्करण को अद्यतन करना
जब आप setup.py
( py setup.py sdist
उदाहरण के लिए) के साथ एक वितरण बनाते हैं , तो सभी वर्तमान जानकारी को निकाला जाएगा और वितरण में संग्रहीत किया जाएगा। यह अनिवार्य रूप से setup.py --version
कमांड चलाता है और फिर उस संस्करण की जानकारी को package.egg-info
फ़ोल्डर में स्टोर करता है जो वितरण मेटाडेटा को संग्रहीत करता है।
संस्करण मेटा-डेटा को अद्यतन करने की प्रक्रिया पर ध्यान दें:
यदि आप git से संस्करण डेटा खींचने के लिए pbr का उपयोग नहीं कर रहे हैं, तो बस अपने setup.cfg को नए संस्करण की जानकारी के साथ सीधे अपडेट करें (आसान पर्याप्त है, लेकिन सुनिश्चित करें कि यह आपकी रिलीज़ प्रक्रिया का एक मानक हिस्सा है)।
यदि आप git का उपयोग कर रहे हैं, और आपको अपने मेटाडेटा फ़ोल्डर में git रेपो जानकारी को अपडेट करने का सबसे सरल तरीका केवल python setup.py sdist
एक python setup.py bdist_xxx
कमांड या बाइनरी वितरण ( कमांड का उपयोग या एक ) बनाने की आवश्यकता नहीं है, तो <mypackage>.egg-info
बस python setup.py install
कमांड चलाना है । यह गिट रेपो से मेटाडेटा खींचने से संबंधित सभी पीबीआर फ़ंक्शन चलाएगा और आपके स्थानीय .egg-info
फ़ोल्डर को अपडेट करेगा , आपके द्वारा परिभाषित किसी भी प्रवेश-बिंदु के लिए स्क्रिप्ट निष्पादन स्थापित करें, और जब आप इस आदेश को चलाते हैं तो अन्य फ़ंक्शन आप आउटपुट से देख सकते हैं।
ध्यान दें कि .egg-info
फ़ोल्डर को आमतौर पर मानक रेफ़ॉन.gitignore
फ़ाइलों (जैसे कि Gitignore.IO से ) में गिट रेपो में संग्रहीत होने से बाहर रखा गया है , क्योंकि यह आपके स्रोत से उत्पन्न हो सकता है। यदि इसे बाहर रखा गया है, तो सुनिश्चित करें कि आपके पास एक मानक "रिलीज़ प्रक्रिया" है, रिलीज़ से पहले मेटाडेटा को अपडेट करने के लिए, और जो भी पैकेज आप PyPi.org पर अपलोड करते हैं या अन्यथा वितरित करते हैं, इस डेटा को सही संस्करण में शामिल करना चाहिए। यदि आप चाहते हैं Git (यानी जोड़ने के लिए इस जानकारी को रोकने के लिए, आप अनदेखा किया जा रहा से विशिष्ट फ़ाइलों को बाहर कर सकते रेपो !*.egg-info/PKG_INFO
के लिए .gitignore
)
किसी स्क्रिप्ट से संस्करण को एक्सेस करना
आप पैकेज में ही पायथन स्क्रिप्ट्स के भीतर वर्तमान बिल्ड से मेटाडेटा एक्सेस कर सकते हैं। संस्करण के लिए, उदाहरण के लिए, ऐसा करने के कई तरीके हैं जो मैंने अब तक पाए हैं:
## 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
कुछ अन्य उत्तरों के समान संस्करण जानकारी निकालने के लिए इनमें से एक को सीधे पैकेज में रख सकते हैं :
__all__ = (
'__version__',
'my_package_name'
)
import pkg_resources # part of setuptools
__version__ = pkg_resources.get_distribution("mypackage").version