python - বিতরণ, distutils, setuptools এবং distutils2 মধ্যে পার্থক্য?




packaging distribute (5)

পরিস্থিতি

আমি পাইথন 3-তে একটি ওপেন সোর্স লাইব্রেরি পোর্ট করার চেষ্টা করছি। ( SymPy , যদি কেউ অবাক হয়।)

তাই, পাইথনের জন্য বিল্ডিংয়ের সময় স্বয়ংক্রিয়ভাবে 2to3 চালানো দরকার। এটি করার জন্য, আমাকে distribute ব্যবহার করতে হবে। অতএব, আমি বর্তমান সিস্টেমটি বন্দর করতে হবে, যা (তত্ত্ব অনুসারে) distutils


সমস্যাটি

দুর্ভাগ্যবশত, আমি নিশ্চিত নই এই মডিউলগুলির মধ্যে পার্থক্য কী - distutils , distribute , setuptools । ডকুমেন্টেশানটি সেরা হিসাবে স্কেচি, কারণ তারা সবাই একে অপরকে একটি ফর্ক বলে মনে করে, যা বেশিরভাগ পরিস্থিতিতে (কিন্তু প্রকৃতপক্ষে, সবই নয়) সামঞ্জস্যপূর্ণ হতে পারে ... এবং এভাবে এবং আরও।


প্রশ্নটি

কেউ পার্থক্য ব্যাখ্যা করতে পারে? আমি কি ব্যবহার করা অনুমিত হয়? সবচেয়ে আধুনিক সমাধান কি? (একটি সরাইয়া হিসাবে, আমি Distribute করার জন্য পোর্টিং উপর কিছু গাইড প্রশংসা করি, কিন্তু প্রশ্ন এর সুযোগ অতিক্রম একটি tad ...)


অনেকে এই বিষয়ে পরিষ্কার সম্প্রদায় নির্দেশিকা অভাব সম্পর্কে অভিযোগ করেছেন।

বর্তমানে এটি সরঞ্জামগুলির সুপারিশগুলির সেরা আধিকারিক উত্সের মতো মনে হচ্ছে: https://packaging.python.org/en/latest/current.html#tool-recommendations সুপারিশ


আমি একটি distutils রক্ষণাবেক্ষণ এবং distutils 2 / প্যাকেজিং অবদানকারী। আমি কনফু 2011 এ পাইথন প্যাকেজিং সম্পর্কে একটি আলাপ করেছি এবং এই দিন আমি এটির একটি বর্ধিত সংস্করণ লিখছি। এটি এখনো প্রকাশিত হয় নি, তাই এখানে এমন কিছু অংশ রয়েছে যা জিনিসগুলিকে সংজ্ঞায়িত করতে সহায়তা করবে।

  • Distutils প্যাকেজিং জন্য ব্যবহৃত স্ট্যান্ডার্ড টুল। এটা সহজ প্রয়োজনের জন্য বরং ভাল কাজ করে, কিন্তু প্রসারিত সীমিত এবং তুচ্ছ নয়।

  • Setuptools অনুপস্থিত distutils কার্যকারিতা পূরণ এবং নতুন দিক অন্বেষণ ইচ্ছা থেকে জন্মগ্রহণ একটি প্রকল্প। কিছু উপবিধানে, এটি একটি সত্যিকারের মান। এটি বানর-প্যাচিং এবং জাদু ব্যবহার করে যা পাইথন কোর ডেভেলপারদের দ্বারা প্রভাবিত হয়।

  • বিতরণটি সেটআপটোসগুলির একটি ফর্ক যা ডেভেলপারদের দ্বারা শুরু হয়েছিল এটি অনুভব করে যে তার উন্নয়ন গতি খুব ধীর ছিল এবং এটি বিকাশ সম্ভব ছিল না। একই গ্রুপ দ্বারা distutils2 শুরু হয় যখন তার উন্নয়ন যথেষ্ট ধীর ছিল। 2013-আগস্ট আপডেট: বিতরণটি সেটআপসোলসে আবার মার্জ করা এবং বন্ধ করা হয়েছে।

  • Distutils2 একটি নতুন distutils লাইব্রেরি, distutils কোডবেসে একটি ফর্ক হিসাবে শুরু, সেটআপ সরঞ্জাম থেকে কিছু ভাল ধারণা (যা কিছু PEPs মধ্যে পুঙ্খানুপুঙ্খভাবে আলোচনা করা হয়েছে), এবং পিপ দ্বারা অনুপ্রাণিত একটি মৌলিক ইনস্টলার সঙ্গে। Distutils2 আমদানি করতে ব্যবহৃত প্রকৃত নামটি পাইথন 3.3+ স্ট্যান্ডার্ড লাইব্রেরিতে packaging , অথবা distutils2 এবং 3.1-3.2 এ distutils2। (একটি ব্যাকপোর্ট শীঘ্রই উপলব্ধ হবে।) Distutils2 Python 3.3 রিলিজ তৈরি করে না, এবং এটি হোল্ড করা হয়।

অধিক তথ্য:

আমি শীঘ্রই আমার গাইড শেষ আশা করি, এটি প্রতিটি লাইব্রেরীর শক্তিশালী এবং দুর্বল পয়েন্ট এবং একটি সংক্রমণ গাইড সম্পর্কে আরও তথ্য থাকবে।


এই বিষয় এখনও flux হতে মনে হয়। 10-31-2013 অনুসারে "পাইথন প্যাকেজিং ব্যবহারকারী গাইড" দ্রুত প্রস্তাবনাগুলি "কোন সরঞ্জামসেট বর্তমানে সুপারিশ করা হয়েছে" সংজ্ঞায়িত করে। এটি "পাইথন প্যাকেজিংয়ের ভবিষ্যত" এর সাথে লিঙ্ক করতে ব্যবহৃত হয়েছিল যা এখন, 1/20/2019, 5+ বছর পরে, একটি মৃত লিঙ্ক। :)


দ্রষ্টব্য: উত্তর অপ্রচলিত, এখন অপ্রচলিত বিতরণ।

হ্যাঁ, আপনি এটা পেয়েছেন। : -আমি মনে করি এই মুহুর্তে পছন্দের প্যাকেজটি Distribute , যা settools এর একটি ফর্ক, যা distutils (মূল প্যাকেজিং সিস্টেম) একটি এক্সটেনশান। Setuptools রক্ষণাবেক্ষণ করা হয় না তাই ফর্ক এবং নামকরণ করা হয়, তবে ইনস্টল যখন এটি setuptools এর প্যাকেজ নাম ব্যবহার করে! আমি মনে করি বেশিরভাগ পাইথন ডেভেলপার এখন Distribute ব্যবহার করে, এবং আমি নিশ্চিত যে আমি তা বলতে পারি।


২017 সালের জানুয়ারী অনুসারে, এই প্রশ্নের অন্যান্য উত্তরগুলি কমপক্ষে দুই বছর অতিবাহিত। যখন আপনি পাইথন প্যাকেজিং সমস্যাগুলির বিষয়ে পরামর্শ পান, প্রকাশনার তারিখটি দেখতে মনে রাখবেন এবং পুরানো তথ্য বিশ্বাস করবেন না।

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

সরঞ্জাম সংক্ষিপ্ত বিবরণ:

জানুয়ারী 2017 এ পাইথন প্যাকেজিং আড়াআড়ি একটি সারসংক্ষেপ এখানে:

সমর্থিত সরঞ্জাম:

  • Distutils এখনও পাইথন প্যাকেজিং জন্য আদর্শ হাতিয়ার। এটি স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত করা হয়েছে (পাইথন 2 এবং পাইথন 3.0 থেকে 3.6)। এটি সহজ পাইথন বিতরণের জন্য উপকারী, তবে বৈশিষ্ট্যগুলির অভাব। এটি distutils পাইথন প্যাকেজটি উপস্থাপন করে যা আপনার setup.py স্ক্রিপ্টে আমদানি করা যেতে পারে।

  • Setuptools Distutils 'সীমাবদ্ধতা অতিক্রম করতে উন্নত ছিল, এবং মান লাইব্রেরি অন্তর্ভুক্ত করা হয় না। এটি easy_install নামে একটি কমান্ড-লাইন ইউটিলিটি চালু করে। এটি setuptools পাইথন প্যাকেজটিও উপস্থাপিত করে যা আপনার setup.py স্ক্রিপ্টে আমদানি করা যেতে পারে এবং pkg_resources পাইথন প্যাকেজ যা আপনার কোডে আমদানি করা যেতে পারে যেটি বিতরণের সাথে ইনস্টল করা ডেটা ফাইলগুলি সনাক্ত করতে পারে। তার distutils এটি distutils প্যাকেজ distutils বানর-প্যাচ। এটা pip সঙ্গে ভাল কাজ করা উচিত। এটা নিয়মিত রিলিজ দেখায়।

  • scikit-build একটি উন্নত বিল্ড সিস্টেম জেনারেটর যা অভ্যন্তরীণভাবে কম্পাইলযুক্ত পাইথন এক্সটেনশানগুলি তৈরি করতে সিএমকে ব্যবহার করে। Scikit- বিল্ড distutils উপর ভিত্তি করে হয় না, এটা সত্যিই তার সীমাবদ্ধতা কোন আছে না। যখন নিজা-বিল্ড উপস্থিত থাকে, তখন বিজ্ঞিট-বিল বিকল্পগুলির চেয়ে তিনগুণ দ্রুত বড় প্রকল্পগুলিকে সংকলন করতে পারে। এটা pip সঙ্গে ভাল কাজ করা উচিত। এটা নিয়মিত রিলিজ দেখায়।

প্রত্যাখ্যাত / পরিত্যক্ত সরঞ্জাম:

  • বিতরণ Setuptools একটি ফর্ক ছিল। এটি একই import setuptools ভাগ করে নিয়েছে, তাই যদি আপনি বিতরণ বিতরণ করেন তবে import setuptools আমদানি করে বিতরণযোগ্য প্যাকেজটি আমদানি করে। বিতরণটি সেটআপটোলস 0.7 এ আবার মার্জ করা হয়েছিল , তাই আপনাকে আর বিতরণ করার প্রয়োজন নেই। প্রকৃতপক্ষে, পাইপির সংস্করণটি কেবল একটি সামঞ্জস্য স্তর যা সেটআপটোল ইনস্টল করে।

  • Distutils2 ছিল Distutils, Setuptools এবং বিতরণ সেরা সেরা গ্রহণ এবং পাইথন এর স্ট্যান্ডার্ড লাইব্রেরি অন্তর্ভুক্ত স্ট্যান্ডার্ড টুল হয়ে ওঠে। ধারণাটি ছিল যে ডিস্ট্রুটিল 2 পুরাতন পাইথন সংস্করণের জন্য বিতরণ করা হবে এবং ডিস্ট্রুটিল 2টিকে পাইথন 3.3 এর জন্য packaging নামকরণ করা হবে, যা এটি তার আদর্শ লাইব্রেরিতে অন্তর্ভুক্ত করবে। এই পরিকল্পনাগুলি উদ্দেশ্য হিসাবে যেতে হয়নি তবে, এবং বর্তমানে, Distutils2 একটি পরিত্যক্ত প্রকল্প । সর্বশেষ মুক্তিটি ২01২ সালের মার্চ মাসে ছিল, এবং এর পিপিআই হোম পেজ অবশেষে তার মৃত্যু প্রতিফলিত করার জন্য আপডেট করা হয়েছে।

আলফা সফ্টওয়্যার:

  • Distlib একটি সরঞ্জাম যা পূর্ববর্তী সরঞ্জামগুলির কার্যকারিতা একটি উপসেটটি বাস্তবায়ন করার লক্ষ্যে লক্ষ্য করে, কিন্তু শুধুমাত্র কার্যক্ষম যা অনুমোদিত PEP গুলিতে খুব ভালভাবে সংজ্ঞায়িত করা হয়। এটি পিইপিএ (পাইথন প্যাকেজ অথরিটি) এর সরঞ্জামগুলির মধ্যে একটি, এবং আশা করা যায় যে এটি শেষ পর্যন্ত কোনদিন পাইথন স্ট্যান্ডার্ড লাইব্রেরীতে অন্তর্ভুক্ত করা উচিত। এটি এখনও আলফা সফ্টওয়্যার হিসাবে বিবেচিত হয়, তাই শেষ ব্যবহারকারী সতর্ক থাকুন।

  • আরও কয়েকটি সরঞ্জাম রয়েছে (উদাহরণস্বরূপ: বেন্টো), তবে আমি তাদের উল্লেখ করব না কারণ তারা খুব বেশি অস্পষ্ট বা বিশেষ, এই উত্তর পোস্টটির জন্য প্রাথমিক বা অব্যবহৃত, নাকি তারা সরাসরি বিকল্প নয়।

প্রস্তাবনা:

তাই, এই সমস্ত বিকল্পগুলির মধ্যে, আমি সেটআপটোলগুলিকে সুপারিশ করব , যদি না আপনার প্রয়োজনীয়তাগুলি খুব মৌলিক এবং আপনি শুধুমাত্র Distutils প্রয়োজন। Setuptools ভার্চুয়ালেনভ এবং পিপের সাথে খুব ভাল কাজ করে, আমি অত্যন্ত সুপারিশ করি এমন সরঞ্জাম। ভার্চুয়ালেনভ এবং পাইপটি উভয়ই অফিসিয়াল বলে বিবেচিত হতে পারে, কারণ এটি পিইপিএর অংশ এবং পাইথন 3 এখন জাহাজগুলিকে ensurepip (যা আপনাকে কিছু সিস্টেমে pip ইনস্টল করতে সহায়তা করে)।

আপনি যদি ভার্চুয়ালেনভ দেখতে চান তবে আপনি এই প্রশ্নে আগ্রহী হতে পারেন: venv , pyvenv , pyenv , pyvenv , pyenv pyvenv মধ্যে পার্থক্য কী? । (হ্যাঁ, আমি জানি, আমি আপনার সাথে কাঁদছি।)

একটি পার্শ্ব-নোট হিসাবে, আমি ভার্চুয়ালেনভ 1.10 বা উচ্চতর ব্যবহার করার সুপারিশ করি, এটি প্রথম রিলিজ যা পাইথন 2 এবং 3 উভয়ের জন্য সেটআপটোল / বিতরণ বিতরণকে স্বীকৃতি দেয়।





distribute