ব্যবহার setuptools
এবংpbr
সংস্করণ পরিচালনা করার জন্য কোনও মানক উপায় নেই, তবে আপনার প্যাকেজগুলি পরিচালনা করার মানক উপায় setuptools
।
সংস্করণ পরিচালনার জন্য আমি সামগ্রিকভাবে খুঁজে পেয়েছি সেরা সমাধানটি হ'ল এক্সটেনশনটি ব্যবহার setuptools
করা pbr
। সংস্করণ পরিচালনার এটি এখন আমার স্ট্যান্ডার্ড পদ্ধতি।
সম্পূর্ণ প্যাকেজিংয়ের জন্য আপনার প্রকল্প সেট আপ করা সহজ প্রকল্পগুলির জন্য ওভারকিল হতে পারে, তবে যদি আপনাকে সংস্করণ পরিচালনা করতে হয় তবে আপনি সম্ভবত সবকিছু ঠিক করার জন্য সঠিক স্তরে রয়েছেন। এটি করা আপনার প্যাকেজটি পাইপিতে পুনরায় প্রেরণীয় করে তোলে যাতে প্রত্যেকে এটি পিপ দিয়ে ডাউনলোড করে ব্যবহার করতে পারে।
পিবিআর বেশিরভাগ মেটাডেটা setup.py
সরঞ্জামগুলির বাইরে এবং একটি setup.cfg
ফাইলের মধ্যে সরিয়ে দেয় যা পরে বেশিরভাগ মেটাডেটার উত্স হিসাবে ব্যবহৃত হয়, যা সংস্করণ অন্তর্ভুক্ত করতে পারে। এটি মেটাডাটা pyinstaller
প্রয়োজনের মতো কিছু ব্যবহার করে এক্সিকিউটেবলের মধ্যে প্যাকেজ করার অনুমতি দেয় (যদি তা হয় তবে আপনার সম্ভবত এই তথ্য প্রয়োজন হবে ), এবং অন্যান্য প্যাকেজ পরিচালনা / সেটআপ স্ক্রিপ্টগুলি থেকে মেটাডেটা পৃথক করে। আপনি setup.cfg
ম্যানুয়ালি সংস্করণ স্ট্রিংটি সরাসরি আপডেট করতে পারেন এবং *.egg-info
আপনার প্যাকেজ রিলিজগুলি তৈরি করার সময় এটি ফোল্ডারে টানা হবে । আপনার স্ক্রিপ্টগুলি তারপরে বিভিন্ন পদ্ধতি ব্যবহার করে মেটাডেটা থেকে সংস্করণটি অ্যাক্সেস করতে পারে (এই প্রক্রিয়াগুলি নীচের বিভাগগুলিতে বর্ণিত)।
ভিসিএস / এসসিএমের জন্য গিট ব্যবহার করার সময়, এই সেটআপটি আরও ভাল, কারণ এটি গিট থেকে প্রচুর মেটাডেটা টানবে যাতে আপনার রেপো সংস্করণ, লেখক, চেঞ্জলগস সহ কয়েকটি মেটাডেটার জন্য আপনার সত্যের উত্স হতে পারে, ইত্যাদি সংস্করণের জন্য বিশেষভাবে, এটি রেপোতে গিট ট্যাগের উপর ভিত্তি করে বর্তমান কমিটের জন্য একটি সংস্করণ স্ট্রিং তৈরি করবে।
যেহেতু পিবিআর সরাসরি আপনার গিট রেপো থেকে সংস্করণ, লেখক, চেঞ্জলগ এবং অন্যান্য তথ্য টানবে, সুতরাং এতে থাকা কিছু মেটাডেটা 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
ফোল্ডারে ফাইলে সংরক্ষণ করে যা বিতরণ মেটাডেটা সঞ্চয় করে।
সংস্করণ মেটা-ডেটা আপডেট করার প্রক্রিয়াতে নোট:
যদি আপনি গিট থেকে সংস্করণ ডেটা টানতে পিবিআর ব্যবহার না করে থাকেন তবে কেবল নতুন নতুন সংস্করণ তথ্যের সাথে আপনার সেটআপ সিএফজি সরাসরি আপডেট করুন (যথেষ্ট সহজ, তবে নিশ্চিত হন যে এটি আপনার প্রকাশের প্রক্রিয়ার একটি আদর্শ অংশ)।
আপনি যদি গিট ব্যবহার করছেন এবং আপনার মেটাডেটা ফোল্ডারে গিট রেপো তথ্য আপডেট করার সহজ উপায় বা বাইনারি বিতরণ ( python setup.py sdist
কোনও python setup.py bdist_xxx
কমান্ডের ব্যবহার বা একটি ) তৈরি করার দরকার নেই <mypackage>.egg-info
হ'ল python setup.py install
কমান্ডটি চালানো । এটি গিট রেপো থেকে মেটাডেটা টানানোর সাথে সম্পর্কিত সমস্ত পিবিআর ফাংশন পরিচালনা করবে এবং আপনার স্থানীয় .egg-info
ফোল্ডারটি আপডেট করবে, আপনার নির্ধারিত যে কোনও এন্ট্রি-পয়েন্টগুলির জন্য স্ক্রিপ্ট এক্সিকিউটেবলগুলি ইনস্টল করবে এবং আপনি যখন এই আদেশটি চালাবেন তখন আউটপুট থেকে আপনি দেখতে পাবেন functions
নোট করুন যে .egg-info
ফোল্ডারটি সাধারণত পাইথন .gitignore
ফাইলগুলিতে (যেমন Gitignore.IO থেকে ) গিট রেপোতে নিজেকে সংরক্ষণ করা থেকে বাদ দেওয়া হয় কারণ এটি আপনার উত্স থেকে উত্পন্ন হতে পারে। যদি এটি বাদ দেওয়া হয় তবে নিশ্চিত হয়ে নিন যে রিলিজের আগে স্থানীয়ভাবে মেটাডেটা আপডেট করার জন্য আপনার কাছে একটি স্ট্যান্ডার্ড "রিলিজ প্রক্রিয়া" রয়েছে এবং আপনি পাইপআই.আর.ও আপলোড করেন বা অন্যথায় বিতরণ করেন এমন কোনও প্যাকেজের সঠিক সংস্করণ থাকতে এই ডেটা অবশ্যই অন্তর্ভুক্ত করা উচিত। আপনি যদি গিট রেপো এই তথ্যটি ধারণ করতে চান তবে নির্দিষ্ট ফাইলগুলিকে উপেক্ষা করা থেকে বাদ দিতে পারেন (অর্থাত্ যোগ !*.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