Как организовать проект 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
кстати, я бы рекомендовал сохранить имена модулей / пакетов в нижнем регистре. Это не влияет на функциональность, но это более "pythonic".
С точки зрения файловой системы, модуль-это файл, оканчивающийся .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-пакет-шаблон
структура каталогов
.
|-- 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
кошки make-файл
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
возможно, вы захотите проверить libary 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, имена пакетов и модулей должны быть строчными. Итак, если мы предположим, что проект называется "статистика Ботонда", ваша структура будет чем-то вроде это:
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
как я использую распространение тестов для выполнения тестов.
вот как я это делаю. :-)
на cookiecutter
на audreyr
включает в себя несколько шаблонов проектов на Python:
пакет использует один ~/.cookiecutterrc
файл для создания пользовательских шаблонов проектов на Python, Java, JS и других языках.
например, шаблон Python, совместимый с PyPI
: