python एक पायथन परियोजना कैसे व्यवस्थित करें?




pydev project-organization (7)

मैं पाइथन के लिए नया हूं और मैं एक मिनी प्रोजेक्ट शुरू कर रहा हूं। लेकिन मुझे "पायथन मार्ग" में फ़ोल्डरों को व्यवस्थित करने के बारे में कुछ संदेह हैं।

मैं अपने विकास पर्यावरण में पीईडीवी का उपयोग कर रहा हूं, और जब मैं एक नई परियोजना बनाता हूं तो एक फ़ोल्डर बनाया जाता है जिसे "src" कहा जाता है

+ src

अब, PyDev में मैं "पायडेव मॉड्यूल" और "पायडेव पैकेज" बना सकता हूं

मुझे अपनी परियोजना को निम्न तरीके से व्यवस्थित करने की आवश्यकता है:

+ Indicators
    - Moving_averages.py
    - Stochastics.py
+ Strategies
    - Moving_averages_cross.py
- example.py

मॉड्यूल और पैकेज के संदर्भ में मैं इसे कैसे व्यवस्थित कर सकता हूं? मॉड्यूल और पैकेज का अर्थ क्या है?

सादर,



python-package-template देखें

निर्देशिका संरचना

    .
    |-- bin
    |   `-- my_program
    |-- docs
    |   `-- doc.txt
    |-- my_program
    |   |-- data
    |   |   `-- some_data.html
    |   |-- __init__.py
    |   |-- submodule
    |   |   `-- __init__.py
    |   |-- helpers.py
    |-- tests
    |   |-- __init__.py
    |   |-- test_helpers.py
    |-- Makefile
    |-- CHANGES.txt
    |-- LICENSE.txt
    |-- README.md
    |-- requirements-dev.txt
    |-- requirements.txt
    `-- setup.py

बिल्ली मेकफ़ाइल

    PYTHON=`which python`
    NAME=`python setup.py --name`


    all: check test source deb

    init:
        pip install -r requirements.txt --use-mirrors

    dist: source deb

    source:
        $(PYTHON) setup.py sdist

    deb:
        $(PYTHON) setup.py --command-packages=stdeb.command bdist_deb

    rpm:
        $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall

    test:
        unit2 discover -s tests -t .
        python -mpytest weasyprint

    check:
        find . -name \*.py | grep -v "^test_" | xargs pylint --errors-only --reports=n
        # pep8
        # pyntch
        # pyflakes
        # pychecker
        # pymetrics

    clean:
        $(PYTHON) setup.py clean
        rm -rf build/ MANIFEST dist build my_program.egg-info deb_dist
        find . -name '*.pyc' -delete

फ़ाइल सिस्टम परिप्रेक्ष्य से, एक मॉड्यूल एक फ़ाइल है जो .py साथ समाप्त होता है और एक पैकेज एक फ़ोल्डर होता है जिसमें मॉड्यूल और (नेस्टेड) ​​पैकेज होते हैं। पाइथन एक फ़ोल्डर को एक पैकेज के रूप में पहचानता है यदि इसमें __init__.py फ़ाइल है।

उस तरह की एक फाइल संरचना

some/
    __init__.py
    foofoo.py
    thing/
        __init__.py
        barbar.py

some पैकेज को परिभाषित करता है, जिसमें एक मॉड्यूल foofoo और एक नेस्टेड पैकेज thing , जिसमें फिर से मॉड्यूल foofoo । हालांकि, पैकेज और मॉड्यूल का उपयोग करते समय, आप वास्तव में इन दो प्रकारों में अंतर नहीं करते हैं:

import some

some.dothis() # dothis is defined in 'some/__init__.py'

import some.foofoo # <- module
import some.thing # <- package

कृपया अपने पैकेज / मॉड्यूल नामकरण का चयन करते समय PEP8 का पालन करें (यानी लोअर केस नामों का उपयोग करें)।


एक पैकेज मूल रूप से __init__.py फ़ाइल के साथ एक फ़ोल्डर होता है और आमतौर पर कुछ मॉड्यूल, जहां मॉड्यूल एक *.py फ़ाइल है। इसे मुख्य रूप से import साथ करना है। यदि आप संकेतक को __init__.py जोड़ते हैं तो आप इसका उपयोग कर सकते हैं:

from Indicators.Stochastics import *

या

from Indicators import Stochastics

वैसे, मैं मॉड्यूल / पैकेज नाम लोअरकेस रखने की सलाह दूंगा। यह कार्यक्षमता को प्रभावित नहीं करता है लेकिन यह अधिक "पायथनिक" है।


एक पैकेज एक निर्देशिका है जिसमें __init__.py है। निर्देशिका से अंतर यह है कि आप इसे आयात कर सकते हैं।

प्रति "पायथन रास्ता" नहीं है, लेकिन आप पाएंगे कि प्रोजेक्ट से संबंधित नाम के साथ अपने सभी मॉड्यूल को एक पैकेज में रखना एक अच्छा विचार है।

इसके अलावा, पायथन शैली गाइड, पीईपी 8 का पालन करने के लिए, पैकेज और मॉड्यूल नाम सभी लोअरकेस होना चाहिए। इसलिए, अगर हम मानते हैं कि परियोजना को "बोटंड सांख्यिकी" कहा जाता है तो आपकी संरचना इस तरह कुछ होगी:

botondstats/
    indicators/
        moving_averages.py
        stochastics.py
    strategies/
        moving_averages_cross.py
    example.py

फिर आप Stochastics कक्षा कर कर मिल जाएगा

from botondstats.indicators.stochastics.Stochastics

(संरचना को बनाए रखने के कई तरीके हैं लेकिन आयात कम करते हैं, लेकिन यह एक और सवाल है)।

आप इस संरचना को src/ तहत रख सकते हैं, लेकिन यह आवश्यक नहीं है। मैं कभी नही करता हूँ। इसके बजाय मेरे पास एक मुख्य निर्देशिका है:

BotondStatistics/
    docs/
    botonstats/ # the above structure
    setup.py    # Distutils/distribute configuration for packaging.

इस निर्देशिका में मैं आमतौर पर वर्चुअलएन्व भी करता हूं इसलिए वास्तव में मुझे bin / lib / et al भी होता है। विकास आमतौर पर चलकर किया जाता है

./bin/python setup.py tests

जैसे ही मैं परीक्षण चलाने के लिए Distrubute परीक्षण धावक का उपयोग करता हूं।

मैं ऐसा करता हूं। :-)


प्रोजेक्ट स्ट्रक्चर पर निर्णय लेने से पहले, यह पूछना अच्छा होगा कि परियोजना का उद्देश्य क्या होगा। क्या यह विश्लेषण से दूर होगा? एक खिलौना अवधारणा जिसे आप जांचना चाहते हैं? एक पूर्ण उड़ा परियोजना जिसे आप वितरित करना चाहते हैं? आपके प्रोजेक्ट को संरचित करने के लिए आप जिस प्रयास को रखना चाहते हैं वह अलग होगा।

  • यदि यह विश्लेषण से एक है, तो मैं ipython नोटबुक का उपयोग करना पसंद करता हूं। नोटबुक आपके विचारों के प्रवाह को पकड़ लेगा, और आप बाद के संदर्भ के लिए अपने कोड में मार्कअप में नोट्स जोड़ सकते हैं।
  • यदि यह एक खिलौना अवधारणा है जिसे आप जांचना चाहते हैं, तो मुझे सबसे अच्छा काम करने के लिए एक सरल, त्वरित दृष्टिकोण मिल जाता है। आप यह जानने के लिए अपनी अवधारणा को जल्दी से कार्यान्वित करने में सक्षम होना चाहते हैं कि यह संभव है या नहीं और इस पर अधिक समय व्यतीत करने के लायक है। पायथन के दर्शन का हिस्सा है 'पूर्णता की कोशिश न करें क्योंकि "पर्याप्त अच्छा" अक्सर यही होता है।' आप हमेशा बाद में वापस आ सकते हैं और अपनी परियोजना को ऐसे तरीके से तैयार कर सकते हैं जो सर्वोत्तम सॉफ्टवेयर इंजीनियरिंग प्रथाओं का पालन करता हो।
  • यदि आप अपनी परियोजना को ढांचा बनाना चाहते हैं तो आप इसे बाद में वितरित कर सकते हैं, और इसलिए यह कई मॉड्यूल के लिए स्केल करता है, मैं निम्नलिखित संरचना की अनुशंसा करता हूं:

    projectname
     ├── MANIFEST.in
     ├── setup.py
     ├── README
     ├── .gitignore
     ├── .git
     ├── projectname_env
     └── projectname
         ├── __init__.py
         ├── subpackageone
         │   ├── __init__.py
         │   ├── second_module.py
         │   ├── tests
         │   │   └── test_second_module.py
         │   └── models
         │       └── model1
         ├── first_module.py   
         └── tests
             └── test_second_module.py
    

मुझे इस ब्लॉग को पसंद करने के विस्तृत कारण क्यों हैं , लेकिन मूलभूत बात यह है कि पदानुक्रमित निम्न स्तर प्रोजेक्टनाम निर्देशिका में आपकी वास्तविक परियोजना होती है। इसके साथ-साथ सभी टूल्स हैं जो (गिट) और पैकेज (setup.py, MANIFEST.in) को प्रबंधित करने में मदद करते हैं।


आप आधुनिक-पैकेज-टेम्पलेट libary जांचना चाह सकते हैं। यह एक ऐसे प्रोजेक्ट के लिए वास्तव में एक अच्छा बुनियादी लेआउट स्थापित करने का एक तरीका प्रदान करता है जो आपको कुछ प्रश्नों के माध्यम से चलता है और आपको कुछ आसानी से वितरित करने में सक्षम होने में मदद करने के लिए प्रयास करता है।

http://pypi.python.org/pypi/modern-package-template







project-organization