Как организовать проект Python?


Я новичок в Python и я начинаю мини-проекта. но у меня есть некоторые сомнения относительно того, как организовать папки в "Python Way".

Я использую PyDev в своей среде разработки, и когда я создаю новый проект, создается папка с именем "src"

+ src

теперь в PyDev я могу создать "модуль Pydev "и"пакет PyDev"

мне нужно организовать свой проект следующим образом:

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

Как я могу организовать это с точки зрения Модули и пакеты? В чем смысл модулей и пакетов?

С Уважением,

8 64

8 ответов:

пакет-это в основном папка с __init__.py файл под ним и обычно некоторые модули, где модуль-это . Это имеет отношение к import в основном. Если вы добавите __init__.py для индикаторов вы можете использовать:

from Indicators.Stochastics import *

или

from Indicators import Stochastics

кстати, я бы рекомендовал держать имена модулей / пакетов в нижнем регистре. Это не влияет на функциональность, но это более "питон".

С точки зрения файловой системы, модуль-это файл, оканчивающийся .py и пакет-это папка, содержащая модули (вложенные) снова пакеты. Python распознает папку как пакет, если она содержит .

такая файловая структура

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

определяет пакет some, который имеет модуль foofoo и вложенный пакет thing, который снова имеет модуль barbar. Однако при использовании пакетов и модулей вы не отличаете их друг от друга эти два типа:

import some

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

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

пожалуйста PEP8 при выборе именования пакетов / модулей (т. е. использовать имена в нижнем регистре).

посмотреть 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

кошки Makefile

    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

возможно,вы захотите проверить библиотеку modern-package-template. Это дает возможность настроить действительно хороший базовый макет для проекта, который проведет вас через несколько вопросов и попытается помочь вам получить что-то, что может быть распространено довольно легко.

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

прежде чем принять решение о структуре проекта, хорошо спросить себя, какова будет цель проекта. Это будет один из анализов? Концепция игрушки, которую вы хотите исследовать? Полномасштабный проект, который вы собираетесь распространять? Количество усилий, которые вы хотите вложить в структурирование вашего проекта, будет отличаться.

  • если это один от анализа, я хотел бы использовать оболочкой IPython ноутбуков. Блокнот будет фиксировать поток ваших мыслей, а вы можно добавить примечания в разметке к коду для последующего использования.
  • если это концепция игрушки, которую вы хотите исследовать, я нахожу простой и быстрый подход к работе лучше всего. Вы хотите иметь возможность быстро реализовать свою концепцию, чтобы узнать, возможно ли это, и, следовательно, стоит потратить на это больше времени. Часть философии Python - "не пытайтесь достичь совершенства, потому что" достаточно хорошо " часто именно это."Вы всегда можете вернуться позже и структурировать свой проект таким образом, чтобы следовать лучшим программным обеспечением инженерная практика.
  • Если вы хотите структурировать свой проект, чтобы позже его можно было распространять, и чтобы он масштабировался до многих модулей, я рекомендую следующую структуру:

    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
    

подробные причины, почему мне нравится эта структура в своем блоге, но основная суть заключается в том, что иерархически более низкого уровня

пакет-это каталог с __init__.py в нем. Отличие от каталога заключается в том, что его можно импортировать.

нет" пути Python " как такового, но вы обнаружите, что это хорошая идея, чтобы поместить все ваши модули в один пакет с именем, связанным с проектом.

кроме того, чтобы следовать руководству по стилю Python, PEP8, имена пакетов и модулей должны быть все в нижнем регистре. Итак, если мы предположим, что проект называется "статистика Botond", ваша структура будет чем-то вроде это:

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.

в этом каталоге у меня также обычно есть virtualenv, поэтому на самом деле у меня также есть bin/ lib/ et al. Развитие обычно это делается путем запуска

./bin/python setup.py tests

как я использую распространение тестов для выполнения тестов.

вот как я это делаю. : -)

попробовать python_boilerplate_template:

https://pypi.python.org/pypi/python_boilerplate_template

The cookiecutter project by audreyr включает в себя несколько шаблонов проектов на Python:

пакет использует один ~/.cookiecutterrc файл для создания пользовательских шаблонов проектов на Python, Java, JS и других языках.

например, шаблон Python совместим с PyPI:

cookiecutter-pypackage