পাইথন অ্যাপ্লিকেশনটির জন্য সর্বোত্তম প্রকল্প কাঠামো কী? [বন্ধ]


730

কল্পনা করুন যে আপনি পাইথনে একটি তুচ্ছ-শেষ ব্যবহারকারীর ডেস্কটপ (ওয়েব নয়) অ্যাপ্লিকেশন বিকাশ করতে চান। প্রকল্পের ফোল্ডার স্তরক্রমকে গঠনের সর্বোত্তম উপায় কী?

পছন্দসই বৈশিষ্ট্যগুলি হ'ল রক্ষণাবেক্ষণ, আইডিই-বন্ধুত্ব, সোর্স কন্ট্রোল ব্রাঞ্চিং / মার্জ করার উপযুক্ততা এবং ইনস্টল প্যাকেজগুলির সহজ প্রজন্ম।

নির্দিষ্টভাবে:

  1. আপনি কোথায় উত্স রাখেন?
  2. আপনি অ্যাপ্লিকেশন স্টার্টআপ স্ক্রিপ্টগুলি কোথায় রাখবেন?
  3. আপনি IDE প্রকল্প ক্রাফ্ট কোথায় রাখবেন?
  4. আপনি ইউনিট / গ্রহণযোগ্যতা পরীক্ষা কোথায় রাখবেন?
  5. আপনি কনফিগার ফাইল হিসাবে পাইথন নন ডেটা কোথায় রাখবেন?
  6. পাইড / সুতরাং বাইনারি এক্সটেনশন মডিউলগুলির জন্য আপনি সি ++ এর মতো পাইথন উত্সগুলি কোথায় রাখবেন?

উত্তর:


376

খুব বেশি ব্যাপার হয় না। যা আপনাকে খুশি করে তা কাজ করবে। পাইথন প্রকল্পগুলি সহজ হতে পারে বলে অনেক নির্বুদ্ধ নিয়ম নেই।

  • /scriptsবা /binসেই ধরণের কমান্ড-লাইন ইন্টারফেস স্টাফের জন্য
  • /tests আপনার পরীক্ষার জন্য
  • /lib আপনার সি-ভাষা লাইব্রেরির জন্য
  • /doc বেশিরভাগ ডকুমেন্টেশনের জন্য
  • /apidoc Epydoc- উত্পাদিত API ডক্সের জন্য।

এবং শীর্ষ স্তরের ডিরেক্টরিতে README, কনফিগারেশন এবং হোয়াট নোট থাকতে পারে।

/srcগাছ ব্যবহার করা উচিত কি না তা হার্ড পছন্দ । পাইথন মধ্যে একটি পার্থক্য নেই /src, /libএবং /binজাভা বা C- এর মতো হয়েছে।

যেহেতু কোনও শীর্ষ স্তরের /srcডিরেক্টরিটিকে কিছু অর্থহীন হিসাবে দেখা যায় তাই আপনার শীর্ষ স্তরের ডিরেক্টরিটি আপনার অ্যাপ্লিকেশনের শীর্ষ স্তরের আর্কিটেকচার হতে পারে।

  • /foo
  • /bar
  • /baz

আমি এই সমস্তগুলি "নামের সাথে আমার পণ্য" ডিরেক্টরিতে অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি। সুতরাং, আপনি যদি নামের একটি অ্যাপ্লিকেশন লিখছেন quuxতবে যে ডিরেক্টরিতে এই সমস্ত উপাদান রয়েছে সেটির নাম দেওয়া হয়েছে /quux

অন্য একটি প্রকল্পের PYTHONPATH, মডিউলটি /path/to/quux/fooপুনরায় ব্যবহার করতে অন্তর্ভুক্ত থাকতে পারে QUUX.foo

আমার ক্ষেত্রে, যেহেতু আমি কমোডো সম্পাদনা ব্যবহার করি, তাই আমার আইডিই কুফুটটি একটি একক .KPF ফাইল। আমি আসলে এটি শীর্ষ-স্তরের /quuxডিরেক্টরিতে রেখেছি এবং এসভিএন এ যুক্ত করা বাদ দিই ।


23
কোনও ওপেন সোর্স অজগর প্রকল্পগুলির জন্য আপনি তাদের ডিরেক্টরি কাঠামো অনুকরণ করার পরামর্শ দিবেন?
ল্যান্স রাশিং

4
একটি ভাল উদাহরণের জন্য জাজানো তাকান।
এসলট

33
আমি জাঙ্গোকে একটি ভাল উদাহরণ হিসাবে বিবেচনা করার প্রবণতা রাখি না - সিস.পাথের সাথে কৌশলগুলি খেলাই আমার বইয়ের তাত্ক্ষণিক ডিকিউ।
চার্লস ডাফি

18
পুনরায় "কৌশলগুলি": জ্যাঙ্গো মূল প্রকল্প ফোল্ডারের মূল পিতাকে sys.path এ যুক্ত করে, যাতে মডিউলগুলি "" প্রজেক্ট.এপ.মডিউল আমদানি ক্লাস থেকে "বা" অ্যাপ্লিকেশন থেকে মডেল আমদানি ক্লাস "হিসাবে আমদানি করা যায়।
জোনাথন হার্টলি

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

242

জিন-পল ক্যালডেরনের পাইথন প্রকল্পের ফাইল সিস্টেম কাঠামোর মতে :

Project/
|-- bin/
|   |-- project
|
|-- project/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |   
|   |-- __init__.py
|   |-- main.py
|
|-- setup.py
|-- README

23
Project/project/? আহ, দ্বিতীয়টির প্যাকেজের নাম।
সিইস টিমারম্যান

44
বিন ফোল্ডারে এক্সিকিউটেবল ফাইল কীভাবে প্রকল্পের মডিউলটি উল্লেখ করে? (আমি মনে করি না পাইথন সিনট্যাক্স ../একটি অন্তর্ভুক্ত বিবৃতিতে অনুমতি দেয় )
থারস্মমনার

8
পছন্দ করুন আপনি প্যাকেজ ইনস্টল! ( pip install -e /path/to/Project)
Kroltan

22
যদি কেউ এই লেআউটটির নমুনা হ্যালো.পি এবং হ্যালো-টেষ্ট.পি দিয়ে জপ করে আমাদের জন্য নতুন করে সরবরাহ করে তবে অবাক হবে।
jeremyjjbrown

8
@ ব্লক মূলটি হ'ল -eপতাকা, যা প্যাকেজটিকে সম্পাদনযোগ্য প্যাকেজ হিসাবে ইনস্টল করে, এটি প্রকৃত প্রকল্প ফোল্ডারের লিঙ্ক হিসাবে ইনস্টল করে। এক্সিকিউটেবলটি কেবল import projectমডিউলটিতে অ্যাক্সেস পেতে পারে।
Kroltan

231

জিন-পল ক্যালডেরনের এই ব্লগ পোস্টটি সাধারণত ফ্রিণোডে # পিসিতে উত্তর হিসাবে দেওয়া হয়।

পাইথন প্রকল্পের ফাইল সিস্টেম কাঠামো

না:

  • আপনার প্রকল্পের সাথে সম্পর্কিত ডিরেক্টরিটির নাম দিন। উদাহরণস্বরূপ, যদি আপনার প্রকল্পটির নাম "ট্যুইস্টেড" হয় তবে এর উত্স ফাইলগুলির জন্য শীর্ষ স্তরের ডিরেক্টরিটির নাম দিন Twisted। আপনি যখন রিলিজ করেন, তখন আপনাকে একটি সংস্করণ সংখ্যা প্রত্যয় অন্তর্ভুক্ত করা উচিত: Twisted-2.5
  • একটি ডিরেক্টরি তৈরি করুন Twisted/binএবং আপনার এক্সিকিউটেবলগুলিকে সেখানে রাখুন if তাদের একটি দেবেন না.pyপাইথন উত্স ফাইল হলেও এক্সটেনশন । এগুলিতে কোনও কোড রাখবেন না এবং আপনার প্রকল্পের অন্য কোথাও সংজ্ঞায়িত একটি মূল ফাংশনে কল করুন। (সামান্য রিঙ্কেল: যেহেতু উইন্ডোজে, ফাইল এক্সটেনশান দ্বারা দোভাষীটি নির্বাচিত হয়, আপনার উইন্ডোজ ব্যবহারকারীরা আসলে .py এক্সটেনশন চান So সুতরাং, যখন আপনি উইন্ডোজের জন্য প্যাকেজ করেন তখন আপনি এটি যুক্ত করতে চাইতে পারেন Unfortunately দুর্ভাগ্যক্রমে কোনও সহজ বিয়োগের কৌশল নেই) আমি এই প্রক্রিয়াটি স্বয়ংক্রিয় করতে জানি। POSIX- র ক্ষেত্রে .py এক্সটেনশনটি কেবল একটি ওয়ার্ট হিসাবে বিবেচনা করা হয়, অন্যদিকে উইন্ডোজে অভাবটি একটি আসল বাগ থাকে, যদি আপনার ব্যবহারকারীবেজে উইন্ডোজ ব্যবহারকারীদের অন্তর্ভুক্ত থাকে তবে আপনি কেবলমাত্র জিপি বেছে নিতে চাইতে পারেন সর্বত্র বিস্তৃতি।)
  • যদি আপনার প্রকল্পটি একক পাইথন উত্স ফাইল হিসাবে প্রকাশযোগ্য হয়, তবে এটি ডিরেক্টরিতে রেখে দিন এবং এটি আপনার প্রকল্পের সাথে সম্পর্কিত কিছু নাম দিন। উদাহরণস্বরূপ Twisted/twisted.py,। আপনার যদি একাধিক উত্স ফাইলের প্রয়োজন হয় তবে পরিবর্তে একটি প্যাকেজ তৈরি করুন ( Twisted/twisted/খালি সহ Twisted/twisted/__init__.py) এবং এতে আপনার উত্স ফাইলগুলি রাখুন। উদাহরণস্বরূপ Twisted/twisted/internet.py,।
  • আপনার প্যাকেজের একটি উপ-প্যাকেজে আপনার ইউনিট পরীক্ষাগুলি রাখুন (দ্রষ্টব্য - এর অর্থ হল যে উপরে একক পাইথন উত্স ফাইল বিকল্পটি একটি কৌশল ছিল - আপনার ইউনিট পরীক্ষার জন্য আপনার সর্বদা কমপক্ষে একটি অন্য ফাইলের প্রয়োজন হয়)। উদাহরণস্বরূপ Twisted/twisted/test/,। অবশ্যই এটি দিয়ে একটি প্যাকেজ তৈরি করুন Twisted/twisted/test/__init__.py। ফাইলগুলিতে পরীক্ষা রাখুন Twisted/twisted/test/test_internet.py
  • আপনি যদি সুন্দর বোধ করেন তবে যথাক্রমে আপনার সফ্টওয়্যারটি ব্যাখ্যা করুন এবং ইনস্টল করুন Twisted/READMEandTwisted/setup.py

না:

  • srcবা আপনার নামে পরিচিত ডিরেক্টরিতে আপনার উত্স রাখুন lib। এটি ইনস্টল না করে চালানো কঠিন করে তোলে।
  • আপনার পাইথন প্যাকেজের বাইরে পরীক্ষা রাখুন। এটি ইনস্টল করা সংস্করণটির বিরুদ্ধে পরীক্ষা চালানো শক্ত করে তোলে।
  • এমন একটি প্যাকেজ তৈরি করুন যা কেবলমাত্র একটিতে থাকবে __init__.pyএবং তারপরে আপনার সমস্ত কোড .ুকিয়ে দেবে __init__.py। কেবলমাত্র একটি প্যাকেজের পরিবর্তে একটি মডিউল তৈরি করুন, এটি সহজ।
  • পাইথনকে আপনার মডিউল বা প্যাকেজটি আমদানি করতে সক্ষম করার জন্য যাদুকর হ্যাকগুলি নিয়ে আসার চেষ্টা করুন ব্যবহারকারীকে তাদের আমদানির পথে ডিরেক্টরিটি যুক্ত না করে (হয় পাইথনপথ বা অন্য কোনও পদ্ধতির মাধ্যমে)। আপনি সমস্ত ক্ষেত্রে সঠিকভাবে পরিচালনা করবেন না এবং আপনার সফ্টওয়্যার যখন তাদের পরিবেশে কাজ না করে তখন ব্যবহারকারীরা আপনার উপর রেগে যাবে।

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

1
কথাটি হ'ল এটি কোন প্রকল্পের গুরুত্বপূর্ণ ডক অংশটি উল্লেখ করবে না যেখানে এটি স্থাপন করা উচিত।
lpapp

14
"Src বা lib নামক ডিরেক্টরিতে আপনার উত্স রাখুন about এটি ইনস্টল না করে চালানো শক্ত করে তোলে about" কি ইনস্টল করা হবে? এটি কি সেই দির নাম যা ইস্যুটির কারণ, বা সত্যই এটি একটি সাবডির?
পিটার এহরিলিচ

3
"কিছু লোক জোর দিয়ে বলবেন যে আপনার পরীক্ষাগুলি আপনার মডিউলের মধ্যেই বিতরণ করা উচিত - আমি অসম্মতি প্রকাশ করি It এটি আপনার ব্যবহারকারীদের জন্য প্রায়শই জটিলতা বাড়ায়; অনেক পরীক্ষার স্যুটে প্রায়শই অতিরিক্ত নির্ভরতা এবং রানটাইম প্রসঙ্গের প্রয়োজন হয়।" পাইথন
এন্ডোলিথ

2
"এটি ইনস্টল না করে চালানো শক্ত করে তোলে" " - যে বিন্দু
নিক টি

123

একটি পাইথন প্রকল্পটি সঠিক উপায়ে ওপেন সোর্সিং দেখুন ।

আমাকে সেই চমৎকার নিবন্ধটির প্রকল্পের বিন্যাসের অংশটি উদ্ধৃত করুন:

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

শীর্ষে শুরু করা যাক। বেশিরভাগ প্রকল্পের বেশিরভাগ শীর্ষ স্তরের ফাইল থাকে (যেমন সেটআপ.পি, রিআডএমইএমডি, প্রয়োজনীয়তা.টিএসটি ইত্যাদি)। এরপরে তিনটি ডিরেক্টরি রয়েছে যা প্রতিটি প্রকল্পের উচিত:

  • প্রকল্পের ডকুমেন্টেশন সহ একটি ডক্স ডিরেক্টরি
  • প্রকল্পের নাম সহ একটি ডিরেক্টরি যা প্রকৃত পাইথন প্যাকেজ সঞ্চয় করে
  • দুটি জায়গার মধ্যে একটিতে একটি ডিরেক্টরি ডিরেক্টরি
    • প্যাকেজ ডিরেক্টরি অধীনে পরীক্ষার কোড এবং সংস্থানগুলি রয়েছে
    • একা একা শীর্ষ স্তরের ডিরেক্টরি হিসাবে আপনার ফাইলগুলি কীভাবে সংগঠিত করা উচিত সে সম্পর্কে আরও ভাল ধারণা পেতে, এখানে আমার একটি প্রকল্প, স্যান্ডম্যানের জন্য বিন্যাসের সরলীকৃত স্ন্যাপশট:
$ pwd
~/code/sandman
$ tree
.
|- LICENSE
|- README.md
|- TODO.md
|- docs
|   |-- conf.py
|   |-- generated
|   |-- index.rst
|   |-- installation.rst
|   |-- modules.rst
|   |-- quickstart.rst
|   |-- sandman.rst
|- requirements.txt
|- sandman
|   |-- __init__.py
|   |-- exception.py
|   |-- model.py
|   |-- sandman.py
|   |-- test
|       |-- models.py
|       |-- test_sandman.py
|- setup.py

আপনি দেখতে পাচ্ছেন, কিছু শীর্ষ স্তরের ফাইল রয়েছে, একটি ডক্স ডিরেক্টরি (উত্পন্ন একটি খালি ডিরেক্টরি যেখানে স্ফিংস উত্পন্ন ডকুমেন্টেশন রাখবে), একটি স্যান্ডম্যান ডিরেক্টরি এবং স্যান্ডম্যানের অধীনে একটি পরীক্ষা ডিরেক্টরি।


4
আমি এটি করি, তবে আরও অনেক কিছু: আমার কাছে একটি 'এনভি' লক্ষ্যযুক্ত একটি শীর্ষ স্তরের মেকফিল রয়েছে যা স্বয়ংক্রিয়ভাবে চলে আসে 'ভ্যুচুয়ালেনভ এনভি; ./env/bin/pip ইনস্টল -r প্রয়োজনীয়তা.txt; ./env/bin/python setup.py বিকাশ ', এবং সাধারণত একটি' পরীক্ষা 'লক্ষ্য যা এনভির উপর নির্ভর করে এবং টেস্ট নির্ভরতা ইনস্টল করে এবং তারপরে পাইস্টেস্ট চালায়।
pjz

@pjz আপনি কি আপনার ধারণা বাড়িয়ে দিতে পারেন? আপনি রাখার কথা বলছেন?Makefile হিসাবে একই স্তরেsetup.py ? সুতরাং আমি যদি বুঝতে পারি যে আপনি সঠিকভাবে make envএকটি নতুন তৈরির কাজটি স্বয়ংক্রিয় venvকরে এবং এতে প্যাকেজগুলি ইনস্টল করেন ...?
সেন্ট আন্টারিও

@ সেন্ট অ্যান্টারিও ঠিক উল্লিখিত হিসাবে আমি সাধারণত পরীক্ষাগুলি চালানোর জন্য একটি 'পরীক্ষার' লক্ষ্য রাখি, এবং কখনও কখনও একটি 'রিলিজ' লক্ষ্য যা বর্তমান ট্যাগটিকে দেখায় এবং একটি চাকা তৈরি করে এবং পাইপিকে প্রেরণ করে।
pjz

32

"পাইথন প্যাকেজিং কর্তৃপক্ষ" এর একটি নমুনা প্রকল্প রয়েছে:

https://github.com/pypa/sampleproject

এটি একটি নমুনা প্রকল্প যা পাইথন প্যাকেজিং ব্যবহারকারী গাইড এর প্যাকেজিং এবং বিতরণ প্রকল্পগুলির টিউটোরিয়ালটিকে সহায়তা হিসাবে উপস্থিত।


root/src/*কাঠামোর দিকে ঝোঁক : github.com/pypa/sampleproject/commit/…
কিউআরটিএল

প্রকল্প কাঠামো পুনর্নির্মাণের জন্যও setuptools.readthedocs.io/_/downloads/en/latest/pdf
qrtL গুলি

19

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

  • আপনি কোথায় উত্স রাখেন?

    • শালীনভাবে বড় প্রকল্পগুলির জন্য উত্সটি কয়েকটি ডিমের মধ্যে বিভক্ত করা বুদ্ধিমানের কাজ। প্রতিটি ডিম পৃথক সেটআপটুলস-লেআউট হিসাবে যেতে হবে PROJECT_ROOT/src/<egg_name>
  • আপনি অ্যাপ্লিকেশন স্টার্টআপ স্ক্রিপ্টগুলি কোথায় রাখবেন?

    • আদর্শ বিকল্পটি হ'ল অ্যাপ্লিকেশন স্টার্টআপ স্ক্রিপ্টটি entry_pointডিমের মধ্যে একটি হিসাবে নিবন্ধিত ।
  • আপনি IDE প্রকল্প ক্রাফ্ট কোথায় রাখবেন?

    • IDE উপর নির্ভর করে। তাদের মধ্যে অনেকে তাদের জিনিসগুলি PROJECT_ROOT/.<something>প্রকল্পের মূলের মধ্যে রাখে এবং এটি ঠিক আছে।
  • আপনি ইউনিট / গ্রহণযোগ্যতা পরীক্ষা কোথায় রাখবেন?

    • প্রতিটি ডিমের পরীক্ষার একটি পৃথক সেট, তার মধ্যে রেখেছেন PROJECT_ROOT/src/<egg_name>/testsডিরেক্টরি। আমি ব্যক্তিগতভাবে py.testএগুলি চালানোর জন্য ব্যবহার করতে পছন্দ করি।
  • আপনি কনফিগার ফাইল হিসাবে পাইথন নন ডেটা কোথায় রাখবেন?

    • এটা নির্ভর করে. পাইথন নানান ধরণের ডেটা থাকতে পারে।
      • "সংস্থানসমূহ" , অর্থাৎ এমন একটি ডেটা যা অবশ্যই একটি ডিমের মধ্যে প্যাকেজ করা উচিত। এই ডেটা কোথাও প্যাকেজ নেমস্পেসের মধ্যে, সম্পর্কিত ডিম ডিরেক্টরিতে যায়। এটি pkg_resourcesপ্যাকেজটির মাধ্যমে setuptoolsবা পাইথন ৩.7 importlib.resourcesথেকে স্ট্যান্ডার্ড লাইব্রেরির মডিউলটির মাধ্যমে ব্যবহার করা যেতে পারে ।
      • "কনফিগারেশন ফাইলগুলি" , অর্থাত্ পাইথনবিহীন ফাইলগুলি যেগুলি প্রকল্প উত্স ফাইলগুলির বাহ্যিক হিসাবে বিবেচিত হবে, তবে অ্যাপ্লিকেশন চলমান শুরু হওয়ার সাথে সাথে কিছু মান দিয়ে শুরু করতে হবে। উন্নয়নের সময় আমি এই জাতীয় ফাইলগুলিতে রাখতে পছন্দ করি PROJECT_ROOT/config। স্থাপনার জন্য বিভিন্ন বিকল্প থাকতে পারে। উইন্ডোজে %APP_DATA%/<app-name>/configলিনাক্স, /etc/<app-name>বা/opt/<app-name>/config
      • উত্পাদিত ফাইল , অর্থাত্ কার্যকর করার সময় অ্যাপ্লিকেশন দ্বারা তৈরি বা সংশোধিত হতে পারে এমন ফাইল আমি তাদের PROJECT_ROOT/varউন্নয়নের সময় এবং /varলিনাক্স মোতায়েনের সময় ধরে রাখতে পছন্দ করব ।
  • পাইড / সুতরাং বাইনারি এক্সটেনশন মডিউলগুলির জন্য আপনি সি ++ এর মতো পাইথন উত্সগুলি কোথায় রাখবেন?
    • মধ্যে PROJECT_ROOT/src/<egg_name>/native

ডকুমেন্টেশন সাধারণত প্রবেশ করবে PROJECT_ROOT/docবা PROJECT_ROOT/src/<egg_name>/doc(এটি ডিমের কিছুটিকে আলাদা বড় প্রকল্প হিসাবে বিবেচনা করে কিনা তার উপর নির্ভর করে)। কিছু অতিরিক্ত কনফিগারেশন যেমন PROJECT_ROOT/buildout.cfgএবং ফাইলগুলিতে থাকবে PROJECT_ROOT/setup.cfg


একটি দুর্দান্ত উত্তরের জন্য ধন্যবাদ! আপনি আমার জন্য অনেক কিছুই স্পষ্ট করলেন! আমার কেবল একটি প্রশ্ন আছে: ডিমগুলি বাসা বাঁধতে পারে?
শুকি

না, আপনি অন্যান্য .egg ফাইলগুলির মধ্যে .egg ফাইলগুলি সংরক্ষণ করার অর্থে ডিমগুলি "নীড়" রাখতে পারবেন না এবং আশা করা যায় যে এগুলি বেশি কার্যকর হবে [যদি না আপনি সত্যিই অদ্ভুত কিছু করতে চান]। আপনি যা করতে পারেন তা হ'ল "ভার্চুয়াল" ডিম তৈরি করুন - খালি প্যাকেজগুলি যা কোনও কার্যকর কোড সরবরাহ করে না, তবে অন্যান্য প্যাকেজগুলিকে তাদের নির্ভরতা তালিকায় তালিকাবদ্ধ করে। এই উপায়ে, যখন কোনও ব্যবহারকারী এই জাতীয় প্যাকেজ ইনস্টল করার চেষ্টা করবেন তখন তিনি অনেকগুলি নির্ভরশীল ডিম পুনরাবৃত্তভাবে ইনস্টল করবেন।
কে.টি.

@ কেটি আপনি কীভাবে উত্পন্ন ডেটা পরিচালনা করবেন সে সম্পর্কে আপনি কিছুটা ব্যাখ্যা করতে পারবেন? বিশেষত, আপনি (কোডে) কীভাবে উন্নয়ন এবং স্থাপনার মধ্যে পার্থক্য করেন? আমি ভাবছি আপনার কিছু base_data_locationপরিবর্তনশীল আছে তবে আপনি কীভাবে এটি যথাযথভাবে সেট করবেন?
সিএমআইআর 21

1
আমি অনুমান করি আপনি "রানটাইম ডেটা" সম্পর্কে কথা বলছেন - এমন কিছু লোকেরা প্রায়শই / var / প্যাকেজ নাম বা ~ / .প্যাকেজনাম / ভার, বা হোয়াট নোটের নীচে রাখে। বেশিরভাগ সময় এই পছন্দগুলি ডিফল্ট হিসাবে পর্যাপ্ত থাকে যা আপনার ব্যবহারকারীরা পরিবর্তনের জন্য যত্নবান হন না। আপনি যদি এই আচরণটি সুর করার অনুমতি দিতে চান, তবে বিকল্পগুলি প্রচুর পরিমাণে হয় এবং আমি মনে করি না যে এখানে এককভাবে সেরা সর্বোত্তম অনুশীলন রয়েছে। সাধারণ পছন্দসমূহ: ক)। / .প্যাকেজনেম / কনফিগার ফাইল, খ) MY_PACKAGE_CONFIG = / পাথ / টু / কনফিগার ফাইল সি) কমান্ড-লাইন বিকল্প বা ফাংশন পরামিতি d) এর সমন্বয়।
কে.টি.

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

15

আমার অভিজ্ঞতায় এটি কেবল পুনরাবৃত্তির বিষয়। আপনার ডেটা এবং কোড যেখানেই আপনি যান বলে মনে করেন। সম্ভাবনা রয়েছে, যাইহোক আপনি ভুল হয়ে যাবেন। তবে একবার কীভাবে জিনিসগুলি ঠিকঠাক আকার ধারণ করতে চলেছে সে সম্পর্কে আপনি আরও ভাল ধারণা পেয়ে গেলে আপনি এই ধরণের অনুমানগুলি তৈরি করতে আরও ভাল অবস্থানে রয়েছেন।

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

এই বলে যে, আমি আমার প্রাথমিক বিন্দুতে ফিরে যাচ্ছি: এটিকে খুব বড় চুক্তি করে না। এটি এমন কোনও জায়গায় রাখুন যা আপনার জন্য কাজ করে বলে মনে হচ্ছে। যদি আপনি এমন কোনও কিছু খুঁজে পান যা কাজ করে না, তবে এটি (এবং হওয়া উচিত) পরিবর্তিত হতে পারে।


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

10

অ পাইথন ডেটা সেটআপলগুলিতেpackage_data সমর্থন ব্যবহার করে আপনার পাইথন মডিউলগুলির মধ্যে সেরা বান্ডিল হয় । আমি দৃ strongly়ভাবে প্রস্তাব দিচ্ছি যে ভাগ করা নেমস্পেসগুলি যা একাধিক প্রকল্পগুলি ব্যবহার করতে পারে তা তৈরি করতে নেমস্পেস প্যাকেজগুলি ব্যবহার করে - অনেকটা জাভা কনভেনশনগুলিতে প্যাকেজ স্থাপনের com.yourcompany.yourproject(এবং একটি ভাগ করে com.yourcompany.utilsনেমস্পেস রাখতে সক্ষম হওয়া ) like

পুনরায় শাখা এবং মার্জ করা, আপনি যদি একটি ভাল পর্যাপ্ত উত্স নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করেন তবে এটি নামগুলির মাধ্যমে এমনকি মার্জগুলি পরিচালনা করবে; বাজার এ ক্ষেত্রে বিশেষ ভাল।

এখানে অন্য কয়েকটি জবাবের বিপরীতে, আমি srcশীর্ষস্থানীয় ডিরেক্টরিতে ( docএবং testপাশাপাশি ডিরেক্টরিতে) ডিরেক্টরি থাকার বিষয়ে +1 আছি । ডকুমেন্টেশন ডিরেক্টরি গাছের জন্য নির্দিষ্ট কনভেনশনগুলি আপনি কী ব্যবহার করছেন তার উপর নির্ভর করে পরিবর্তিত হবে; স্পিংক্স , উদাহরণস্বরূপ, নিজস্ব কনভেনশনগুলো যা তার দ্রুতশুরু টুল সমর্থন রয়েছে।

দয়া করে সেটআপটুলস এবং পিকেজি_সোর্সগুলি উত্তোলন করুন; এটি অন্যান্য কোডগুলির জন্য আপনার কোডের নির্দিষ্ট সংস্করণগুলির উপর নির্ভর করা (এবং আপনি যদি ব্যবহার করছেন তবে একাধিক সংস্করণে বিভিন্ন নন-কোড ফাইলের সাথে একযোগে ইনস্টল করা খুব সহজ করে তোলে package_data)।

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