প্রয়োজনীয়গুলি.txt বনাম setup.py


119

আমি পাইথনের সাথে কাজ শুরু করি। আমি requirements.txtএবং setup.pyআমার প্রকল্পে যুক্ত করেছি । তবে, আমি এখনও উভয় ফাইলের উদ্দেশ্য সম্পর্কে বিভ্রান্ত। আমি পড়েছি যা setup.pyপুনরায় বিতরণযোগ্য জিনিসগুলির জন্য নকশাকৃত এবং এটি পুনরায় বিতরণযোগ্য জিনিসের requirements.txtজন্য নকশাকৃত। তবে আমি নিশ্চিত নই যে এটি সঠিক।

কীভাবে এই দুটি ফাইল ব্যবহার করার ইচ্ছা রয়েছে?


4
আপনি কি আপনার সঠিক শিরোনাম ব্যবহার করে ওয়েব অনুসন্ধান করেছেন? এই নিবন্ধটি (আমি যখন অনুসন্ধান করেছি তখন প্রথম হিট) এই বিষয়টিতে আমি সবচেয়ে ভাল পড়েছি।
ক্রিস

4
এই নিবন্ধটি দরকারী হতে পারে: caremad.io/posts/2013/07/setup-vs-requirement (দুঃখিত, একটি সঠিক উত্তরে প্রয়োজনীয় অংশগুলি বের করতে খুব অলস)। আরেকটি বিষয় হ'ল কিছু সরঞ্জাম (যেমন টেস্টিং) এর একে অপরটির প্রতি পক্ষপাতিত্ব থাকতে পারে - তবে আপনি যদি পাইথনটিতে কাজ শুরু করে থাকেন তবে তা আপনাকে বিরক্ত করবেন না।
drdaeman

উত্তর:


91

requirements.txt:

এটি আপনাকে আপনার বিকাশের পরিবেশ নির্ধারণ করতে সহায়তা করে।

প্রোগ্রামগুলিতে pipফাইলের তালিকাভুক্ত সমস্ত প্যাকেজ একসাথে ডুবিয়ে ইনস্টল করতে ব্যবহার করা যেতে পারে। এর পরে আপনি আপনার অজগর স্ক্রিপ্ট বিকাশ শুরু করতে পারেন। বিশেষত কার্যকর যদি আপনি অন্যদের বিকাশে অবদান রাখার বা ভার্চুয়াল পরিবেশ ব্যবহার করার পরিকল্পনা করে থাকেন। আপনি এটি এভাবে ব্যবহার করেন:

pip install -r requirements.txt

setup.py:

এটি আপনাকে পুনরায় বিতরণ করতে পারে এমন প্যাকেজগুলি তৈরি করতে সহায়তা করে।

setup.pyস্ক্রিপ্ট শেষ ব্যবহারকারীর সিস্টেমে আপনার প্যাকেজ ইনস্টল করার ডেভেলপমেন্ট এনভায়রনমেন্ট প্রস্তুত করতে না বোঝানো হয় pip install -r requirements.txtনা। আরও বিস্তারিত জানার জন্য এই উত্তরটি দেখুন setup.py


আপনার প্রকল্পের নির্ভরতা উভয় ফাইলে তালিকাভুক্ত করা হয়েছে।


4
কোন ক্ষেত্রে আমি তাদের মধ্যে একটিই থাকব? আমি উভয় আছে যা?
মার্টিন থোমা

31
এরম ... আপনি কেবল নিজের স্থানীয় মেশিনে মজাদার জন্য স্ক্রিপ্ট করুন: না। স্ক্রিপ্ট একাধিক মেশিন / ভিটুএলএনভিতে বিকাশ করা হয়েছে তবে পুনরায় বিতরণ করা হয়নি: প্রয়োজনীয়তা.txt। স্ক্রিপ্টটি কেবলমাত্র আপনার মেশিনে বিকাশ করা হয়েছে তবে পুনরায় বিতরণ করা উচিত: সেটআপ.পি py স্ক্রিপ্ট পুনরায় বিতরণ করা হবে এবং একাধিক পরিবেশে বিকাশ করা হবে: উভয়ই।
AndreasT

আপনি কি এই উত্তরে যুক্ত করতে পারেন?
মার্টিন থোমা

আপনি কি সত্যিই কখনও setup.pyছাড়া হবে requirements.txt? এমন কোনও বন্ধুকে জিজ্ঞাসা করুন যিনি এই জিনিসগুলি সম্পূর্ণরূপে বুঝতে পারেন না।
এরিক

61

সংক্ষিপ্ত উত্তরটি হ'ল কেবল 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কেবল নিম্নলিখিতটি দিয়ে একটি সাধারণ থাকার কথা বিবেচনা করতে পারেন :

 # requirements.txt
 #
 # installs dependencies from ./setup.py, and the package itself,
 # in editable mode
 -e .

 # (the -e above is optional). you could also just install the package
 # normally with just the line below (after uncommenting)
 # .

-eএকটি বিশেষ pip installবিকল্প যা দেওয়া প্যাকেজ ইনস্টল সম্পাদনাযোগ্য মোড। pip -r requirements.txtএই ফাইলটিতে কখন চালানো হবে, পিপটি তালিকাটির মাধ্যমে আপনার নির্ভরতাগুলি ইনস্টল করবে ./setup.py। সম্পাদনাযোগ্য বিকল্পটি আপনার ইনস্টল ডিরেক্টরিতে (একটি ডিম বা সংরক্ষণাগারযুক্ত অনুলিপি পরিবর্তে) একটি সিমিলিংক রাখবে। এটি বিকাশকারীদের পুনরায় ইনস্টল না করেই সংগ্রহস্থল থেকে কোড সম্পাদনা করার অনুমতি দেয়।

আপনার প্যাকেজ সংগ্রহস্থলে যখন দুটি ফাইল থাকে তখন আপনি "সেটআপলগুলি অতিরিক্তগুলি" বলেও সুবিধা নিতে পারেন। আপনি কাস্টম বিভাগের আওতায় setup.py এ alচ্ছিক প্যাকেজগুলি সংজ্ঞায়িত করতে পারেন এবং পাইপ দিয়ে কেবল সেই বিভাগ থেকে প্যাকেজগুলি ইনস্টল করতে পারেন:

# setup.py
from setuptools import setup
setup(
   name="FOO"
   ...
   extras_require = {
       'dev': ['pylint'],
       'build': ['requests']
   }
   ...
)

এবং তারপরে, প্রয়োজনীয় ফাইলগুলিতে:

# install packages in the [build] category, from setup.py
# (path/to/mypkg is the directory where setup.py is)
-e path/to/mypkg[build]

এটি আপনার সমস্ত নির্ভরতা তালিকা সেটআপ.পাইয়ের ভিতরে রাখবে keep

দ্রষ্টব্য : আপনি সাধারণত একটি স্যান্ডবক্স থেকে পাইপ এবং সেটআপ.পি চালিয়ে যাবেন, যেমন প্রোগ্রামের সাথে তৈরি virtualenv। এটি আপনার প্রকল্পের বিকাশের পরিবেশের প্রেক্ষাপটের বাইরে পাইথন প্যাকেজ ইনস্টল করা এড়াবে।


7
এবং আপনার ভিতরে কেবল .ডাব্লু / ও থাকতে পারে । এই পদ্ধতিটি কেবলমাত্র সমস্ত প্রয়োজনীয়তার প্রতিনিধিত্ব করে এবং আপনাকে কাউকে সম্পাদনযোগ্য মোডে বাধ্য করার দরকার নেই। ব্যবহারকারীরা তারা চাইলে এখনও করতে পারেন। -erequirements.txtsetup.pypip install -e .

4
"-E" দিয়ে আকর্ষণীয় কৌশল। প্রযোজনা.এসটিএসএস্টে, তবে এটি প্রয়োজনীয় সিস্টেমের নির্দিষ্টকরণ হ'ল প্রয়োজনীয়তাগুলির উদ্দেশ্যকে পরাভূত করে না? এমনকি কেন একটি ক্ষেত্রে আছে?
বেন ওগোরেক

সেটআপ.পাইয়ের ভিতরে আপনার সঠিক সিস্টেমের প্রয়োজনীয়তা থাকতে পারে। থাকা "।" inferences.txt এটি বর্তমান ফোল্ডারে সেটআপ.পি ব্যবহার করে। -e .নির্ভরতাগুলি খুঁজে পেতে সেটআপ.পি ব্যবহার করা হয় , তবে একটি অনুলিপি গ্রহণের পরিবর্তে পাইপ ইনস্টল ফোল্ডারে বর্তমান ফোল্ডারটি (স্থানে, একটি সিমলিংক সহ) লিঙ্ক করে - আপনি -eকেবল প্যাকেজটি বিকাশ করলেই আপনি সাধারণত ব্যবহার করতে চান । এর সাথে -e, আপনার পাইপ প্যাকেজ ফাইলগুলিতে পরিবর্তনগুলি (* .py) তত্ক্ষণাত আপনার পাইপ পরিবেশে কার্যকর হবে, প্রতি পরিবর্তনের পরে প্যাকেজটিকে পুনরায় ইনস্টল করার পরিবর্তে।
init_js

@init_js প্রয়োজনীয় ফাইল বা সিডব্লুডির তুলনায় "বর্তমান ফোল্ডার" যা পাইপ থেকে বলা হয়? যদি আপনি এটি করেন cd foo && pip install -r ./bar/requirements.txtতবে এটি সেটআপ.পি foo/barবা ইন অনুসন্ধান করবে foo? যদি দ্বিতীয়টি হয় তবে প্রাক্তনকে অর্জন করার উপায় আছে?
ড্যান এম

pip -r REQআরআরইউ যে ডিরেক্টরিতে থাকে সেটির বিষয়ে চিন্তা করে না। আপনি FIFO এমনকি যদি আপনি চান একটি থেকে এটা খাওয়াতে পারেন: pip install -r <(echo "mylib1"; echo "mylib2";)<(CMD)বাশ কমান্ডের বিকল্প কোথায় , স্টিডিন পুনর্নির্দেশ নয়।
init_js

14

সম্পূর্ণতার স্বার্থে, আমি এখানে এটি 4 4 টি ভিন্ন কোণে দেখছি ।

  1. তাদের নকশা উদ্দেশ্য পৃথক

এটি সরকারী ডকুমেন্টেশন (জোর খনি) থেকে উদ্ধৃত যথাযথ বিবরণ :

যেখানে ইনস্টল_ইয়ের্কায়ার্স (সেটআপ.পি এ) একক প্রকল্পের জন্য নির্ভরতা নির্ধারণ করে , প্রয়োজনীয় ফাইলগুলি প্রায়শই একটি সম্পূর্ণ পাইথন পরিবেশের জন্য প্রয়োজনীয়তাগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয় ।

যদিও ইনস্টল_ের প্রয়োজনীয়তাগুলি ন্যূনতম, প্রয়োজনীয় পরিবেশগুলিতে প্রায়শই সম্পূর্ণ পরিবেশের পুনরাবৃত্তিযোগ্য ইনস্টলেশনগুলি অর্জনের উদ্দেশ্যে পিনযুক্ত সংস্করণগুলির একটি সম্পূর্ণ তালিকা থাকে।

তবে এটি এখনও বোঝা সহজ নয়, সুতরাং পরবর্তী বিভাগে 2 টি পদ্ধতির কীভাবে পৃথকভাবে ব্যবহার করার কথা রয়েছে তা প্রদর্শন করার জন্য 2 টি বাস্তব ঘটনা রয়েছে come

  1. তাদের প্রকৃত ব্যবহারগুলি তাই পৃথক (অনুমিত) are

    • যদি আপনার প্রকল্পটি fooস্বতন্ত্র গ্রন্থাগার হিসাবে প্রকাশিত হতে চলেছে (যার অর্থ, অন্যরা সম্ভবত এটি করতে পারে import foo), তবে আপনি (এবং আপনার প্রবাহী ব্যবহারকারীরা) নির্ভরতার একটি নমনীয় ঘোষণা করতে চান, যাতে আপনার গ্রন্থাগারটি না করে (এবং এটি অবশ্যই না ) আপনার নির্ভরতার সঠিক সংস্করণটি কী হবে সে সম্পর্কে "বাছাই করুন"। সুতরাং, সাধারণত, আপনার setup.py এ এই জাতীয় লাইন থাকে:

      install_requires=[
          'A>=1,<2',
          'B>=2'
      ]
      
    • যদি আপনি কেবল আপনার অ্যাপ্লিকেশনের জন্য আপনার প্রকৃত বর্তমান পরিবেশটিকে "ডকুমেন্ট" বা "পিন" করতে চান bar, যার অর্থ, আপনি বা আপনার ব্যবহারকারীরা আপনার অ্যাপ্লিকেশনটি barযেমন ব্যবহার করছেন, যেমন চলমান থাকে তবে python bar.pyআপনি আপনার পরিবেশকে হিমায়িত করতে চাইতে পারেন যাতে এটি সর্বদা একই আচরণ করবে। সেক্ষেত্রে আপনার প্রয়োজনীয় ফাইলগুলি দেখতে এইরকম হবে:

      A==1.2.3
      B==2.3.4
      # It could even contain some dependencies NOT strickly required by your library
      pylint==3.4.5
      
  2. বাস্তবে আমি কোনটি ব্যবহার করব?

    • আপনি যদি এমন কোনও অ্যাপ্লিকেশন বিকাশ করছেন barযা ব্যবহার করবেন python bar.py, যদিও এটি "মজাদার জন্য কেবল স্ক্রিপ্ট", আপনি এখনও প্রয়োজনীয়তাগুলি ব্যবহার করার জন্য প্রস্তাবিত হন t txt কারণ কে জানে, পরের সপ্তাহে (যা ক্রিসমাস হবে) আপনি একটি গ্রহণ করবেন নতুন কম্পিউটার উপহার হিসাবে, যাতে আপনার আবার আপনার সঠিক পরিবেশটি সেটআপ করা দরকার।

    • আপনি যদি একটি লাইব্রেরি বিকাশ করছেন fooযা দ্বারা ব্যবহৃত হবে import foo, আপনাকে একটি সেটআপ.পি প্রস্তুত করতে হবে। পিরিয়ড। তবে আপনি একই সময়ে প্রয়োজনীয়তাও সরবরাহ করতে বেছে নিতে পারেন xt টেক্সট যা করতে পারে:

      (ক) হয় A==1.2.3স্টাইলে থাকুন (উপরে # 2 তে বর্ণিত হিসাবে);

      (খ) বা কেবল একটি যাদুকর একক থাকতে পারে .

      .
      

      যা নকল ছাড়াই মোটামুটি "সেটআপ.পাইয়ের ভিত্তিতে প্রয়োজনীয়তাগুলি ইনস্টল করুন" এর সমান হবে। ব্যক্তিগতভাবে আমি আবছা করে এই শেষ পদ্ধতির ধরনের লাইন, বিভ্রান্তির যোগ করা হয়েছে এবং না সত্যিই মান যোগ করে বিবেচনা, কিন্তু এটা তা সত্ত্বেও একটি কৌতুক একটি পদ্ধতির মধ্যে পাইথন প্যাকেজিং রক্ষণাবেক্ষণকারী ডোনাল্ড উল্লেখ থেকে উদ্ভূত হয় তার ব্লগ পোস্টে

  3. বিভিন্ন নিম্ন সীমানা।

    আপনি উপরোক্ত 3 টি মাপদণ্ড অনুসরণ করার পরেও এবং সঠিকভাবে সিদ্ধান্ত নিয়েছেন যে আপনার গ্রন্থাগারটি তার নির্ভরতা ঘোষণা করার hybrid-engineজন্য একটি ব্যবহার করবে এবং আপনার নমুনা অ্যাপ্লিকেশনটি এর নির্ভরতা ঘোষণা করতে ব্যবহার করবে , যদিও এর সর্বশেষতম সংস্করণ ইতিমধ্যে 1.4.0 এ রয়েছে। আপনি দেখতে পাচ্ছেন যে তাদের নিম্ন সীমাবদ্ধ সংখ্যাগুলির জন্য আপনার পছন্দটি এখনও সূক্ষ্মভাবে পৃথক। এবং এখানে কেন।setup.pyengine>=1.2.0reliable-carrequirements.txtengine>=1.2.3engine

    • hybrid-engineনির্ভর করে engine>=1.2.0কারণ, অনুমানের সাথে বলতে গেলে প্রয়োজনীয় "অভ্যন্তরীণ জ্বলন" সক্ষমতাটি প্রথমে চালু হয়েছিল engine 1.2.0এবং এই সামর্থ্যের প্রয়োজনীয়তা হ'ল এ hybrid-engineজাতীয় সংস্করণটির ভিতরে কিছু (গৌণ) বাগ থাকতে পারে এবং পরবর্তী সংস্করণে 1.2.1-এ স্থির করা হয়েছে কিনা তা বিবেচনা না করেই , ১.২.২, এবং ১.২.৩।

    • reliable-carএটি নির্ভর করে engine>=1.2.3কারণ এটি এখনও পর্যন্ত জানা সমস্যাগুলি ছাড়া প্রাথমিকতম সংস্করণ। নিশ্চিত হয়ে নিন যে পরবর্তী সংস্করণগুলিতে নতুন দক্ষতা রয়েছে, বলুন, "বৈদ্যুতিক মোটর" চালু হয়েছিল engine 1.3.0এবং "পারমাণবিক চুল্লী" চালু হয়েছিল engine 1.4.0, তবে তারা প্রকল্পের জন্য প্রয়োজনীয় নয় reliable-car


"আপনার নির্ভরতার সঠিক সংস্করণটি কী হওয়া উচিত তা সম্পর্কে আপনার গ্রন্থাগারটি 'পিক' হতে পারে না। আপনি কি এই বিন্দুটি কিছুটা ব্যাখ্যা করতে পারেন? আমি অনুমান করি আপনার কোডটি সাধারণত নির্ভরশীলতার নির্দিষ্ট সংস্করণগুলির সাথে পরীক্ষা করা হয় এবং এই পদ্ধতিটি কিছুটা বিপজ্জনক হতে পারে। আমি ধরে নিয়েছি যে একটি লাইব্রেরির বিভিন্ন সংস্করণ নিয়ে কাজ করা উচিত কারণ আপনি নির্ভরতার অনেকগুলি সংস্করণ ইনস্টল করতে চান না? ডিস্কের জায়গা বাঁচাতে?
তারো কিরীটানি

@ তারোকিরিটানি আসলে আমি পাশাপাশি দুটি পৃথক পরিস্থিতি, লাইব্রেরির কেস এবং অ্যাপ্লিকেশন কেস তালিকাভুক্ত করেছি। সম্ভবত আপনি আগে একটি লাইব্রেরিতে কাজ করেন নি? একটি লাইব্রেরি হিসাবে, এটি ডাউন স্ট্রিম প্যাকেজগুলি দ্বারা গ্রাস করা হবে বলে আশা করা হচ্ছে। সুতরাং আপনি যদি আপনার নির্ভরতা পিন করতে বাছাই করেন A==1.2.3এবং তারপরে যদি আপনার লাইব্রেরির ডাউনস্ট্রিম প্যাকেজ নির্ভর হয়ে থাকে তবে A==1.2.4এখন উভয়কেই সন্তুষ্ট করার উপায় থাকবে না। এই দ্বন্দ্বকে হ্রাস করার সমাধান হ'ল আপনার গ্রন্থাগারটি এমন একটি ব্যাপ্তি নির্ধারণ করে যা আপনি জানেন যে এটি কাজ করবে। ধরে নেওয়া অনেকগুলি প্রবাহের গ্রন্থাগার ইতিমধ্যে semver.org অনুসরণ করে , A>=1,<2কাজ করবে।
রায়উইউ

আমি বুঝতে পারি নি যে একটি প্যাকেজের কেবল একটি সংস্করণ একক পরিবেশে ইনস্টল করা যেতে পারে। stackoverflow.com/a/6572017/5686692 স্পষ্টতার জন্য ধন্যবাদ।
তারো কিরীটানি

4
@TaroKiritani হাঁ, অন্যথায় কী করে আপনার অ্যাপ জানি কোন সংস্করণটি হবে fooনা import fooআপনাকে দিতে? আপনি যে লিঙ্কটিতে সরবরাহ করেছেন সেগুলিতে এই হ্যাকি গ্রহণযোগ্য উত্তরগুলি কেন প্যাকেজ রক্ষণাবেক্ষণকারীদের "পছন্দ করা উচিত এবং উচিত নয়" এর একটি নিখুঁত উদাহরণ হিসাবে কাজ করে। :-) এখন আমি কি আপনার উর্ধ্বতন পেতে পারি?
রায়লুও

4
আমি এই নতুন চিন্তায় মন্তব্যও করতে পারি তবে তারপরে এই মন্তব্য বিভাগটি ইতিমধ্যে অফ-টপিক এবং নতুন আগতদের অনুসরণ করা কঠিন follow আমি তোমাকে একটা নতুন প্রশ্ন জিজ্ঞাসা করতে "আমরা অর্ডার নির্ভরতা বিভিন্ন সমন্বয় আমার গ্রন্থাগার কাজ গ্যারান্টি মধ্যে Tox বা কিছু ব্যবহার করা হইবে" সুপারিশ করবে, এবং তারপর মানুষ ঐকতান পারবেন না।
RayLuo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.