का उपयोग कर 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