Как организовать проект Python?
Я новичок в Python и я начинаю мини-проекта. но у меня есть некоторые сомнения относительно того, как организовать папки в "Python Way".
Я использую PyDev в своей среде разработки, и когда я создаю новый проект, создается папка с именем "src"
+ src
теперь в PyDev я могу создать "модуль Pydev "и"пакет PyDev"
мне нужно организовать свой проект следующим образом:
+ Indicators
- Moving_averages.py
- Stochastics.py
+ Strategies
- Moving_averages_cross.py
- example.py
Как я могу организовать это с точки зрения Модули и пакеты? В чем смысл модулей и пакетов?
С Уважением,
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. Это дает возможность настроить действительно хороший базовый макет для проекта, который проведет вас через несколько вопросов и попытается помочь вам получить что-то, что может быть распространено довольно легко.
прежде чем принять решение о структуре проекта, хорошо спросить себя, какова будет цель проекта. Это будет один из анализов? Концепция игрушки, которую вы хотите исследовать? Полномасштабный проект, который вы собираетесь распространять? Количество усилий, которые вы хотите вложить в структурирование вашего проекта, будет отличаться.
- если это один от анализа, я хотел бы использовать оболочкой 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
как я использую распространение тестов для выполнения тестов.
вот как я это делаю. : -)
The
cookiecutter
project byaudreyr
включает в себя несколько шаблонов проектов на Python:пакет использует один
~/.cookiecutterrc
файл для создания пользовательских шаблонов проектов на Python, Java, JS и других языках.например, шаблон Python совместим с
PyPI
: