সেটআপ.পাইতে পিপ প্রয়োজনীয়তা ফাইল বনাম ইনস্টল_ইয়েরায়ার্স কখন ব্যবহার করবেন?


94

আমি পাইথন লাইব্রেরি প্যাকেজ করতে এবং ইনস্টল করতে ভার্চুয়ালভের সাথে পিপ ব্যবহার করছি।

আমি ভাবছিলাম আমি যা করছি তা একটি সাধারণ সাধারণ দৃশ্য। আমি বেশ কয়েকটি লাইব্রেরির রক্ষণাবেক্ষণকারী যার জন্য আমি স্পষ্টভাবে নির্ভরতাগুলি নির্দিষ্ট করতে পারি। আমার কয়েকটি গ্রন্থাগার তৃতীয় পক্ষের লাইব্রেরির উপর নির্ভরশীল যা ট্রানজিটিভ নির্ভরতা রয়েছে যার উপর আমার কোনও নিয়ন্ত্রণ নেই।

আমি pip installযেটি অর্জনের চেষ্টা করছি তা হ'ল আমার লাইব্রেরির একটিতে এর সমস্ত প্রবাহ নির্ভরতা ডাউনলোড / ইনস্টল করা। পাইপ ডকুমেন্টেশনের সাথে আমি যা संघर्ष করছি তা হ'ল / কীভাবে প্রয়োজনীয় ফাইলগুলি নিজেরাই এটি করতে পারে বা যদি তারা সত্যিই কেবল ব্যবহারের পরিপূরক হয় install_requires

install_requiresনির্ভরতা এবং সংস্করণ ব্যাপ্তিগুলি নির্দিষ্ট করার জন্য আমি কি আমার সমস্ত লাইব্রেরিতে ব্যবহার করব এবং তারপরে কেবল কোনও সংঘাতের সমাধানের জন্য প্রয়োজনীয় ফাইলগুলি ব্যবহার করব এবং / অথবা একটি উত্পাদন গঠনের জন্য এগুলিকে হিম করে ফেলব?

আসুন আমি ভেবে দেখি আমি একটি কাল্পনিক বিশ্বে বাস করি (আমি জানি, আমি জানি) এবং আমার উজানের উপর নির্ভরশীলতা সোজা এবং গ্যারান্টিযুক্ত কখনও দ্বন্দ্ব বা পশ্চাদগম্য সামঞ্জস্যতা ভঙ্গ করার পক্ষে নয় ed আমি কী কোনও পাইপ প্রয়োজনীয়তা ফাইল ব্যবহার করতে বাধ্য হব বা কেবল পাইপ / সেটআপলগুলি / বিতরণ করে সমস্ত কিছু ইনস্টল করতে install_requiresপারি?

এখানে অনেকগুলি অনুরূপ প্রশ্ন রয়েছে তবে আমি কখনই এক বা অন্যটিকে ব্যবহার করতে বা উভয়কে একত্রে সুরেলাভাবে ব্যবহার করার মতো মৌলিক হিসাবে খুঁজে পাইনি।


4
এটি দুজনের সম্পর্কের বর্ণনা দিয়ে এবং তারা কীভাবে একীভূত হয় তা খুব সুন্দর একটি নিবন্ধ।
বুজরন পোলেক্স

উত্তর:


68

আমার দর্শন হ'ল এটি install_requiresআপনার প্রয়োজনীয়তার একটি ন্যূনতম নির্দেশ করে should এটিতে সংস্করণ প্রয়োজনীয়তা অন্তর্ভুক্ত থাকতে পারে যদি আপনি জানেন যে কয়েকটি সংস্করণ কাজ করবে না; তবে এটির সংস্করণ প্রয়োজনীয়তা থাকা উচিত নয় যেখানে আপনি নিশ্চিত নন (উদাঃ, কোনও ভবিষ্যতের নির্ভরতার প্রকাশ আপনার লাইব্রেরিটি ভেঙে ফেলবে কিনা তা আপনি নিশ্চিত নন)।

অন্যদিকে প্রয়োজনীয় ফাইলগুলি আপনার কী কী কাজ করে তা নির্দেশ করে এবং এতে প্রস্তাবিত alচ্ছিক নির্ভরতা অন্তর্ভুক্ত থাকতে পারে। উদাহরণস্বরূপ আপনি এসকিউএএলএলচেমি ব্যবহার করতে পারেন তবে মাইএসকিউএল প্রস্তাব করতে পারেন, এবং মাইএসকিউএলডিবি প্রয়োজনীয় ফাইলগুলিতে রাখবেন)।

সুতরাং, সংক্ষেপে: install_requiresহ'ল লোকেরা এমন জিনিসগুলি থেকে দূরে রাখা যা আপনি জানেন না যেগুলি কাজ করে না, যখন আপনার প্রয়োজনীয় জিনিসগুলিকে কাজের জিনিসগুলির দিকে পরিচালিত করার জন্য ফাইলগুলির প্রয়োজন হয়। এর একটি কারণ হ'ল install_requiresপ্রয়োজনীয়তা সর্বদা পরীক্ষা করা হয় এবং প্যাকেজ মেটাডেটা পরিবর্তন না করে অক্ষম করা যায় না। সুতরাং আপনি সহজেই একটি নতুন সংমিশ্রণ চেষ্টা করতে পারবেন না। প্রয়োজনীয় ফাইলগুলি কেবল ইনস্টলের সময় পরীক্ষা করা হয়।


4
এর অর্থ কি আপনার আয়নাটি setup.py install_requires=inোকানো উচিত requirements.txt?
প্রপি

9
উভয়টিই থাকা, সেটআপ.পি এবং প্রয়োজনীয় ফাইলগুলিতে প্রয়োজনীয়তা যদিও বিপজ্জনক, কারণ সদৃশটি কেবল সিঙ্কের বাইরে চলে যেতে বলে।
সেবাস্তিয়ান ব্লাস্ক

4
এছাড়াও, আপনি তখন এটির সাথে আসলে কীভাবে কাজ করবেন? আমি ধরে নিচ্ছি, আপনি অবশ্যই প্রয়োজনীয় ফাইলটি একবারে এমন অবস্থায় পৌঁছে যাবেন যা অবশ্যই কাজ করছে। তারপরে পাইপ সহ প্রকৃত প্যাকেজটি ইনস্টল করুন। আপনি কখনই ব্যবহার করতে পারবেন না -Uকারণ এটি প্রয়োজনীয়তা ফাইল থেকে নির্ভরতাগুলিকে ওভাররাইড করতে পারে? আপনি কিভাবে আপগ্রেড করবেন?
সেবাস্তিয়ান ব্লাস্ক

4
এই উত্তরটি কি অ্যাপ্লিকেশন এবং প্যাকেজগুলির জন্য সমানভাবে প্রযোজ্য? আমার-ওয়েব-অ্যাপ (একটি অ্যাপ্লিকেশন) কিছু-সরঞ্জাম (একটি প্যাকেজ) এর উপর নির্ভর করে কল্পনা করুন, যা উভয়ই অনুরোধ প্যাকেজের উপর নির্ভর করে। যদি কোনও-সরঞ্জামের একটি প্রয়োজনীয় সংস্করণ বা অনুরোধের সংস্করণ পরিসরকে পিন করে এমন কোনও টেক্সট ফাইল থাকে, তবে এটি আমার-ওয়েব-অ্যাপ্লিকেশনটির জন্য একটি সম্ভাব্য সমস্যা তৈরি করে বলে মনে হচ্ছে, যা একটি বিবাদী সংস্করণ / সংস্করণ সীমা নির্দিষ্ট করে থাকতে পারে।
রিস

4
প্যাকেজ ইনস্টল করার একমাত্র উপায় থাকতে হবে। সুতরাং আপনি যদি অন্য অবদানকারীদের বিভ্রান্ত না করতে চান তবে উভয়ই রাখার প্রস্তাব দেওয়া হয় না।
Gewthen

18

আমি আমার সেটআপ.পি এ যা রেখেছি তা এখানে:

# this grabs the requirements from requirements.txt
REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]

setup(
    .....
    install_requires=REQUIREMENTS
)

20
দেখুন, প্রয়োজনীয় ফাইলগুলিতে মন্তব্য এবং অন্তর্ভুক্ত থাকতে পারে। আপনার
পাইপ

4
হ্যাঁ, শেষ পর্যন্ত আমি মন্তব্যগুলি সরিয়ে নিতে এটি পরিবর্তন করেছি। পাইপ পার্সারটি আমার উত্তরের চেয়ে ভাল দেখাচ্ছে।
আরবিপি

7
যদি প্রয়োজনীয় সমস্ত ফাইল ইতিমধ্যে সেটআপ.পাইতে থাকে তবে কেন প্রয়োজনীয় ফাইলগুলি ব্যবহার করবেন?
সেবাস্তিয়ান ব্লাস্ক

4
@ রোমেনহার্ডোইন, যেমন আপনার লিঙ্কিত উত্তরের মন্তব্যে উল্লিখিত হয়েছে, পাইপটি সেভাবে ব্যবহার করা উচিত নয়।
আকাইহোলা

4
হ্যাঁ এই প্রয়োজনীয়তাগুলির জন্য একটি সমালোচনামূলক --extra-index-urlপ্রয়োজন না হওয়া পর্যন্ত এটি আমার পক্ষে কাজ করেছিল এবং এটি আমার মুখে ফুঁকছে। ধন্যবাদ @ রোমাইনহার্ডুইন
টমি

11

পাইথন প্যাকেজিং ইউজার গাইডের এই বিষয়ে একটি পৃষ্ঠা রয়েছে, আমি আপনাকে এটি পড়ার জন্য সুপারিশ করছি:

সারসংক্ষেপ:

install_requiresপ্যাকেজের নির্ভরতার তালিকা রয়েছে যা প্যাকেজটির কাজ করার জন্য অবশ্যই ইনস্টল করা উচিত absolutely এটি নির্দিষ্ট সংস্করণগুলির উপর নির্ভরতা পিন করার জন্য নয়, উদাহরণস্বরূপ ব্যাপ্তিগুলি গ্রহণ করা হয় install_requires=['django>=1.8']। এবং অন্যান্য সরঞ্জাম install_requiresদ্বারা পালন করা হয় pip install name-on-pypi

requirements.txtএটি কেবল একটি পাঠ্য ফাইল যা আপনার pip install -r requirements.txtবিরুদ্ধে চালানো বেছে নিতে পারে । এটা সব নির্ভরতা এবং subdependencies পিনযুক্ত, এই মত সংস্করণ বোঝানো হচ্ছে: django==1.8.1। আপনি একটি ব্যবহার করে তৈরি করতে পারেন pip freeze > requirements.txt। (হেরোকুর মতো কিছু পরিষেবা স্বয়ংক্রিয়ভাবে pip install -r requirements.txtআপনার জন্য চালিত pip install name-on-pypiহয় )) requirements.txtকেবল এদিকে তাকায় না install_requires


5

আমি কেবল কখনও একটি ব্যবহার করি setup.pyএবং install_requiresকারণ দেখার জন্য কেবলমাত্র এক জায়গা রয়েছে। এটি প্রয়োজনীয় ফাইল রাখার মতোই শক্তিশালী এবং বজায় রাখার জন্য কোনও নকল নেই।


প্রশ্নটি হ'ল কখন একটি বা অন্যটি ব্যবহার করবেন, আমি এটি বানান করিনি, তবে আমার উত্তরটি বলছে যে আমি সবসময় একটি ব্যবহার করি এবং অন্যটি কখনই ব্যবহার করি না। কিভাবে যে প্রশ্নের উত্তর না?
সেবাস্তিয়ান ব্লাস্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.