অজগর প্রকল্পগুলির কি একটি MANIFEST.in দরকার, এবং এতে কী হওয়া উচিত?


120

"পাইথন বিতরণ" বলতে গাইড (python-distribute.org ছিল, কিন্তু যে নিবন্ধন অতিপন্ন করেছে) আমাকে বলে অন্তর্ভুক্ত করা doc/txtফাইল ও .pyফাইল বাদ দেওয়া হয় MANIFEST.inফাইল

Sourcedist ডকুমেন্টেশন আমাকে শুধুমাত্র sdist ব্যবহারসমূহ বলে MANIFEST.inএবং কেবলমাত্র আপনার নির্দিষ্ট করতে ও অন্তর্ভুক্ত করা ফাইল অন্তর্ভুক্ত .pyফাইল। এটি আমাকে ব্যবহার করতে বলে: python setup.py sdist --manifest-onlyএকটি উত্পন্ন করতে MANIFEST, তবে পাইথন আমাকে বলে যে এটির অস্তিত্ব নেই

আমি প্রশংসা করি এটি পাইথনের বিভিন্ন সংস্করণ থেকে এবং বিতরণ সিস্টেমটি setuptoolsপুরো গণ্ডগোলের মধ্যে রয়েছে তবে ধরে নিচ্ছি যে আমি পাইথন 3 ব্যবহার করছি এবং (নতুন যেটিতে বিতরণ রয়েছে তবে সেটআপটুলস বলা হয়, কেবলমাত্র বিতরণ সরঞ্জামের জন্য অবহেলিত পুরাতন সেটআপটোলগুলি নয়) সেটআপলগুলিতে পুনরায় নামকরণ বিতরণ ও বিতরণে ফিরিয়ে আনা হবে .....)

এবং আমি 'স্ট্যান্ডার্ড' ফোল্ডার কাঠামো এবং setup.pyফাইল অনুসরণ করছি ,

  1. আমার কি দরকার MANIFEST.in?
  2. এর মধ্যে কী হওয়া উচিত?
  3. এই সমস্ত বিভিন্ন প্যাকেজ সিস্টেম এবং পদ্ধতিগুলি একটি একক সাধারণ প্রক্রিয়াতে কখন তৈরি করা হবে?

উত্তর:


117

পুনরায়: "আমার কি একটি MANIFEST.in দরকার?

না, আপনাকে ব্যবহার করতে হবে না MANIFEST.in। উভয়, distutilsএবং setuptoolsসোর্স পরিবেশনার প্যাকেজের মধ্যে সহ সমস্ত ফাইল উল্লেখ setup.py- মডিউল, প্যাকেজ পাইথন ফাইল, README.txtএবং test/test*.py। বিতরণ প্যাকেজটিতে আপনি যা করতে চান এটি যদি হয় তবে আপনাকে ব্যবহার করতে হবে না MANIFEST.in

যদি আপনি ডিফল্ট ফাইলগুলি অন্তর্ভুক্ত করতে (যুক্ত করতে বা সরিয়ে দিতে) পরিচালনা করতে চান তবে আপনাকে ব্যবহার করতে হবে MANIFEST.in

রে: এতে কী হওয়া উচিত?

পদ্ধতিটি সহজ:

  1. নিশ্চিত করুন, আপনার setup.pyমধ্যে ( setupআর্গুমেন্টের মাধ্যমে) প্রোগ্রামটি চালানোর জন্য আপনার প্রয়োজনীয় সমস্ত ফাইল অন্তর্ভুক্ত রয়েছে (মডিউল, প্যাকেজস, স্ক্রিপ্টস ...)

  2. স্পষ্ট করুন, যদি কিছু ফাইল যুক্ত করতে হয় বা কিছু ফাইল বাদ দেয়। যদি না হয় প্রয়োজন হয়, তবে ব্যবহার করার প্রয়োজন নেই MANIFEST.in

  3. যদি MANIFEST.inপ্রয়োজন হয় তাহলে তৈরি করুন। সাধারণত, আপনি সেখানে যোগ tests*/*.pyফাইল, README.rstআপনি ব্যবহার করবেন না README.txt, docsপরীক্ষা স্যুট জন্য ফাইল এবং সম্ভবত কিছু ডেটা ফাইল, যদি প্রয়োজন হয় তাহলে।

উদাহরণ স্বরূপ:

include README.rst
include COPYING.txt

এটি পরীক্ষা করতে, চালনা করুন python setup.py sdistএবং এর নীচে তৈরি টারবাল পরীক্ষা করুন dist/

কখন এই সমস্ত বিভিন্ন প্যাকেজ সিস্টেম ...

আজ এবং 2 বছর আগের পরিস্থিতিটির সাথে তুলনা করা - পরিস্থিতি অনেক বেশি ভাল - setuptoolsযাবার উপায়। আপনি এই সত্যটি উপেক্ষা করতে পারেন, distutilsকিছুটা ভাঙ্গা এবং নিম্ন স্তরের ভিত্তি setuptoolsহিসাবে আপনার setuptoolsকাছে এই জিনিসগুলি গোপন করার যত্ন নেওয়া হবে।

সম্পাদনা : শেষ কয়েকটি প্রকল্প আমি ব্যবহার pbrতিন লাইন দিয়ে বন্টন প্যাকেজ নির্মাণের জন্য setup.pyএবং বিশ্রাম হচ্ছে setup.cfgএবং requirements.txt। যত্ন MANIFEST.inএবং অন্যান্য অদ্ভুত জিনিস প্রয়োজন হয় না । যদিও প্যাকেজটি আরও কিছু ডকুমেন্টেশনের প্রাপ্য হবে। Http://docs.openstack.org/developer/pbr/ দেখুন


1
আমার সীমিত অভিজ্ঞতাতে মনে হয় আপনি যদি পাইথন মডিউলের ভিতরে না থাকা ফাইলগুলিকে অন্তর্ভুক্ত করতে চান ( init .py সহ dir ), আপনাকে MANIFEST.in ব্যবহার করতে হবে এবং sdist(অর্থ: উত্স বিতরণ ) কমান্ডটি ব্যবহার করতে হবে। তাহলে আপনি যে বিবেচনা bdistএবং bdist_wheelহয় বাইনারি এবং শুধু আপনার পাইথন পাথ ইনস্টল করার জন্য দেয়ার উদ্দেশ্যে করা, এই জ্ঞান করে তোলে। (এই নন-মডিউল ফাইলগুলি এবং ডিরেক্টরিগুলি কোথায় যাবে? ইন /usr/local/lib/python2.7/dist-packages/? অবশ্যই না)) তবে এটি উল্লেখ করার মতো যেহেতু এটি সংরক্ষণাগারটি তৈরি করা দেখে বিভ্রান্তিকর এবং সেগুলিতে ফাইলগুলি অন্তর্ভুক্ত নয়।
ব্রুনো ব্রোনোস্কি

7
অনিবার্য package_dataএবং data_filesসুপারিশগুলি বন্ধ করার জন্য, যা সুযোগের বাইরে রয়েছে, আমি চালিয়ে যাব। package_dataআপনার প্যাকেজটির সাথে ইনস্টল হওয়া ফাইলের তালিকা তৈরি করে যাতে এতে dist-packages/yourpackageস্কিপ করা হত কারণ কোনও * .py নাম নেই। data_filesআপনার প্যাকেজের বাইরে ইনস্টল হওয়া ফাইলগুলি তালিকাভুক্ত করে। প্রতিটি এন্ট্রি একটি টার্গেট পাথ নির্দিষ্ট sys.prefixকরে যা প্রাসঙ্গিক হয় যদি এটি আপেক্ষিক হয় বা সরাসরি তৈরি হয় (অনুমতির অনুমতি দেওয়া হয়) এটি যদি এর সাথে শুরু হয় /
ব্রুনো ব্রোনোস্কি

2
@ জনভ্লিনকিনস্কি কী তা এবং [আরও গুরুত্বপূর্ণভাবে] বিভিন্ন বিতরণ ফর্ম্যাটে অন্তর্ভুক্ত নয় তা জানা গুরুত্বপূর্ণ । আমার একটি সরকারী প্রকল্প রয়েছে যা আমি কেবল উত্স বিতরণের মাধ্যমে বিতরণ করি কারণ আমি প্যাকেজের বাইরে (মূলটিতে) একটি বোটো.সাম্পল সিএফজি ফাইল (যা একটি নকল এডাব্লু আইএএম শংসাপত্র ধারণ করে) অন্তর্ভুক্ত করে এবং বাইনারি বিতরণগুলি এতে অন্তর্ভুক্ত করে না। আমি ডেটাফাইলেস = [('/ etc /', ['boto.cfg'])] এর উত্পাদনে মোতায়েনের জন্য ব্যক্তিগত বাইনারি বিল্ডগুলি তৈরি করি। আপনি যদি নন-পাই ফাইল বিতরণ করতে চান তবে আপনাকে জানতে হবে যে এই জিনিসগুলি কীভাবে কাজ করে।
ব্রুনো ব্রোনোস্কি

2
@ মিশেলগোর্জ সত্যই, তাদের করা উচিত নয়। এই উত্তরটি প্রাচীন এবং পরামর্শ pbrদেওয়াও একটি খারাপ ধারণা।
আর্ন

1
@ আমি একমত হয়েছি, জিনিসগুলি এগিয়ে গেছে। বর্তমানে আমি আমার বেশিরভাগ প্রকল্পগুলি পিবিআর থেকে কবিতায়
জান ভ্লকিনস্কি

7

পুরানো প্রশ্ন, নতুন উত্তর:

না, আপনার দরকার নেই MANIFEST.in। তবে, setuptoolsআপনার (সাধারণত) যা বোঝায় তা করার জন্য আপনাকে ব্যবহার করতে হবে setuptools_scmযা MANIFEST.in2 টি মূল স্থানে ভূমিকা নেয় :

  • এটি নিশ্চিত করে যে প্রাসঙ্গিক ফাইলগুলি চলাকালীন প্যাকেজ করা আছে sdist কমান্ড (যেখানে সমস্ত প্রাসঙ্গিক ফাইলগুলি "উত্সের নিয়ন্ত্রণাধীন সমস্ত ফাইল" হিসাবে সংজ্ঞায়িত করা হয়)
  • যখন ব্যবহার include_package_dataঅংশ হিসেবে প্যাকেজ সংক্রান্ত তথ্য অন্তর্ভুক্ত করা buildবা bdist_wheel। (আবার: উত্স নিয়ন্ত্রণে ফাইলগুলি)

এর historicalতিহাসিক উপলব্ধিটি MANIFEST.inহ'ল: যখন আপনার কাছে সোর্স কন্ট্রোল সিস্টেম নেই তখন আপনার "সোর্স ফাইলগুলি" এবং "আপনার ওয়ার্কিং ডিরেক্টরিতে থাকা ফাইলগুলি" এর মধ্যে পার্থক্য করার জন্য কিছু অন্যান্য প্রক্রিয়া প্রয়োজন। তবে আপনার প্রকল্পটি সোর্স নিয়ন্ত্রণে রয়েছে (ডান ??) সুতরাং এর প্রয়োজন নেই MANIFEST.inএই নিবন্ধে আরও তথ্য

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