সংক্ষিপ্ত উত্তরটি হ'ল কেবল requirements.txt
প্যাকেজ প্রয়োজনীয়তার তালিকা তৈরির জন্য। setup.py
অন্যদিকে ইনস্টলেশন স্ক্রিপ্টের মতোই। আপনি যদি অজগর কোডটি ইনস্টল করার পরিকল্পনা না করেন তবে সাধারণত আপনার কেবল প্রয়োজন হবে requirements.txt
।
ফাইলটি setup.py
প্যাকেজ নির্ভরতা ছাড়াও, ফাইল এবং মডিউলগুলির সেট যা প্যাকেজ করা উচিত (বা সংকলন করা উচিত, দেশীয় মডিউলগুলির ক্ষেত্রে (যেমন, সিতে লিখিত আছে)), এবং অজগর প্যাকেজ তালিকায় যুক্ত করার জন্য মেটাডেটা ( যেমন প্যাকেজের নাম, প্যাকেজ সংস্করণ, প্যাকেজ বিবরণ, লেখক, ...)।
যেহেতু উভয় ফাইলই নির্ভরতা তালিকাভুক্ত করে, এটি কিছুটা সদৃশ হতে পারে। বিস্তারিত জানার জন্য নীচে পড়ুন।
প্রয়োজনীয়তা.txt
এই ফাইলটি পাইথন প্যাকেজ প্রয়োজনীয়তা তালিকাভুক্ত করে। এটি একটি সরল পাঠ্য ফাইল (বিকল্প হিসাবে মন্তব্য সহ) যা আপনার অজগর প্রকল্পের প্যাকেজ নির্ভরতা (প্রতি লাইনে একটি) তালিকাভুক্ত করে । এটি আপনার পাইথন প্যাকেজটি যেভাবে ইনস্টল করা হয়েছে তার বর্ণনা দেয় না । আপনি সাধারণত প্রয়োজনীয় ফাইলটি গ্রাস করবেন pip install -r requirements.txt
।
পাঠ্য ফাইলের ফাইলের নামটি নির্বিচারে, তবে প্রায়শই requirements.txt
কনভেনশন দ্বারা হয়। অন্যান্য পাইথন প্যাকেজগুলির উত্স কোড সংগ্রহস্থলগুলি অন্বেষণ করার সময়, আপনি অন্যান্য নামগুলিতে হোঁচট খেতে পারেন যেমন dev-dependencies.txt
বা dependencies-dev.txt
। এগুলি একই উদ্দেশ্যে পরিবেশন করে dependencies.txt
তবে সাধারণত বিশেষ প্যাকেজের বিকাশকারীদের আগ্রহের অতিরিক্ত নির্ভরতা তালিকাভুক্ত করে, যেমন মুক্তির আগে উত্স কোড পরীক্ষা করার জন্য (যেমন: পাইস্ট, পাইলেট ইত্যাদি)। প্যাকেজটির ব্যবহারকারীদের সাধারণত প্যাকেজটি চালানোর জন্য বিকাশকারী নির্ভরতার পুরো সেট প্রয়োজন হয় না।
যদি একাধিক requirements-X.txt
রূপ উপস্থিত থাকে তবে সাধারণত একটি রানটাইম নির্ভরতা এবং অন্যটি বিল্ড-টাইম বা পরীক্ষার নির্ভরতাগুলি তালিকাভুক্ত করে। কিছু প্রকল্প তাদের প্রয়োজনীয় ফাইলগুলিও ক্যাসকেড করে, অর্থাত্ যখন একটি প্রয়োজনীয় ফাইলের মধ্যে অন্য ফাইল থাকে ( উদাহরণ )। এটি করা পুনরাবৃত্তি হ্রাস করতে পারে।
setup.py
এটি একটি পাইথন স্ক্রিপ্ট যা setuptools
অজগর প্যাকেজ (নাম, ফাইল অন্তর্ভুক্ত, প্যাকেজ মেটাডেটা এবং ইনস্টলেশন) সংজ্ঞায়িত করতে মডিউলটি ব্যবহার করে । এটি requirements.txt
প্যাকেজের রানটাইম নির্ভরতাগুলিও তালিকাভুক্ত করবে । পাইথন প্যাকেজগুলি তৈরি ও ইনস্টল করার জন্য সেটআপলগুলি হ'ল ডি-ফ্যাক্টো উপায়, তবে এর কমতি রয়েছে যা সময়ের সাথে সাথে পিপের মতো নতুন "মেটা-প্যাকেজ পরিচালকদের" বিকাশ ঘটিয়েছে। সেটআপলগুলির উদাহরণ স্বল্পতা হ'ল একই প্যাকেজের একাধিক সংস্করণ ইনস্টল করতে অক্ষমতা এবং একটি আনইনস্টল কমান্ডের অভাব।
অজগর ব্যবহারকারী যখন pip install ./pkgdir_my_module
(বা pip install my-module
) করেন, তখন পাইপ setup.py
প্রদত্ত ডিরেক্টরিতে (বা মডিউল) চালিত হবে । একইভাবে, যে কোনও মডিউল রয়েছে যা ইনস্টল করা setup.py
যেতে পারে pip
, যেমন pip install .
একই ফোল্ডার থেকে চালিয়ে running
আমার কি সত্যিই দুজনের দরকার?
সংক্ষিপ্ত উত্তর হ'ল না, তবে উভয়টিই ভাল লাগল। তারা বিভিন্ন উদ্দেশ্যে অর্জন করে তবে তারা উভয়ই আপনার নির্ভরতা তালিকাবদ্ধ করতে ব্যবহার করা যেতে পারে।
এমন একটি কৌশল রয়েছে যা আপনি requirements.txt
এবং এর মধ্যে নির্ভরতাগুলির তালিকাটি অনুলিপি করা এড়াতে বিবেচনা করতে পারেন setup.py
। আপনি যদি setup.py
ইতিমধ্যে আপনার প্যাকেজটির জন্য পুরোপুরি কাজ করে লিখে থাকেন এবং আপনার নির্ভরতা বেশিরভাগ বাহ্যিক হয় তবে আপনি requirements.txt
কেবল নিম্নলিখিতটি দিয়ে একটি সাধারণ থাকার কথা বিবেচনা করতে পারেন :
-e .
-e
একটি বিশেষ pip install
বিকল্প যা দেওয়া প্যাকেজ ইনস্টল সম্পাদনাযোগ্য মোড। pip -r requirements.txt
এই ফাইলটিতে কখন চালানো হবে, পিপটি তালিকাটির মাধ্যমে আপনার নির্ভরতাগুলি ইনস্টল করবে ./setup.py
। সম্পাদনাযোগ্য বিকল্পটি আপনার ইনস্টল ডিরেক্টরিতে (একটি ডিম বা সংরক্ষণাগারযুক্ত অনুলিপি পরিবর্তে) একটি সিমিলিংক রাখবে। এটি বিকাশকারীদের পুনরায় ইনস্টল না করেই সংগ্রহস্থল থেকে কোড সম্পাদনা করার অনুমতি দেয়।
আপনার প্যাকেজ সংগ্রহস্থলে যখন দুটি ফাইল থাকে তখন আপনি "সেটআপলগুলি অতিরিক্তগুলি" বলেও সুবিধা নিতে পারেন। আপনি কাস্টম বিভাগের আওতায় setup.py এ alচ্ছিক প্যাকেজগুলি সংজ্ঞায়িত করতে পারেন এবং পাইপ দিয়ে কেবল সেই বিভাগ থেকে প্যাকেজগুলি ইনস্টল করতে পারেন:
from setuptools import setup
setup(
name="FOO"
...
extras_require = {
'dev': ['pylint'],
'build': ['requests']
}
...
)
এবং তারপরে, প্রয়োজনীয় ফাইলগুলিতে:
-e path/to/mypkg[build]
এটি আপনার সমস্ত নির্ভরতা তালিকা সেটআপ.পাইয়ের ভিতরে রাখবে keep
দ্রষ্টব্য : আপনি সাধারণত একটি স্যান্ডবক্স থেকে পাইপ এবং সেটআপ.পি চালিয়ে যাবেন, যেমন প্রোগ্রামের সাথে তৈরি virtualenv
। এটি আপনার প্রকল্পের বিকাশের পরিবেশের প্রেক্ষাপটের বাইরে পাইথন প্যাকেজ ইনস্টল করা এড়াবে।