Как организовать проект Python?
Я новичок в Python, и я запускаю мини-проект. но у меня есть некоторые сомнения в том, как организовать папки в "Пути Python".
Я использую PyDev в моей среде разработки, и когда я создаю новый проект, создается папка под названием "src"
+ src
Теперь, в PyDev, я могу создать "модуль Pydev" и "пакет PyDev"
Мне нужно организовать свой проект следующим образом:
+ Indicators
- Moving_averages.py
- Stochastics.py
+ Strategies
- Moving_averages_cross.py
- example.py
Как я могу организовать это с точки зрения модулей и пакетов? В чем смысл модулей и пакетов?
С наилучшими пожеланиями,
Ответы
Ответ 1
Пакет в основном представляет собой папку с файлом __init__.py
под ним и обычно некоторые модули, где Module является *.py
.
Это связано главным образом с import
. Если вы добавите __init__.py
в индикаторы, вы можете использовать:
from Indicators.Stochastics import *
или
from Indicators import Stochastics
Кстати, я бы рекомендовал хранить имена модулей/пакетов в нижнем регистре. Это не влияет на функциональность, но более "питоновское".
Ответ 2
С точки зрения файловой системы модуль представляет собой файл, заканчивающийся на .py
, и пакет снова представляет собой папку, содержащую модули и (вложенные) пакеты. Python распознает папку как пакет, если он содержит файл __init__.py
.
Структура файла, подобная этому
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 при выборе именования пакетов/модулей (т.е. используйте имена в нижнем регистре).
Ответ 3
См. 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
cat 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
Ответ 4
Возможно, вы захотите проверить библиотеку шаблонов современных пакетов. Это дает возможность настроить действительно приятный базовый макет для проекта, в котором вы просматриваете несколько вопросов и старается помочь вам получить что-то, что можно легко распределить.
http://pypi.python.org/pypi/modern-package-template
Ответ 5
Прежде чем принимать решение о структуре проекта, хорошо спросить себя, какова цель проекта. Это будет один анализ? Игрушечную концепцию, которую вы хотите исследовать? Полностью раздутый проект, который вы собираетесь распространять? Количество усилий, которые вы хотите внести в структурирование вашего проекта, будет иным.
- Если это один анализ, мне нравится использовать ipython notebooks. Блокнот будет захватывать поток ваших мыслей, и вы можете добавлять примечания в разметку к вашему коду для последующей справки.
- Если это концепция игрушек, которую вы хотите исследовать, я нахожу простой и быстрый подход к лучшему. Вы хотите иметь возможность быстро реализовать свою концепцию, чтобы узнать, возможно ли это, и, следовательно, стоит потратить на нее больше времени. Часть философии 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
Подробные причины, по которым мне нравится эта структура указаны в моем сообщении в блоге, но основная суть заключается в том, что иерархически более низкий уровень projectname
содержит ваш фактический проект. Наряду с этим есть все инструменты, которые помогают управлять (git) и пакетом (setup.py, MANIFEST.in).
Ответ 6
Пакет представляет собой каталог с __init__.py
в нем. Отличие от каталога состоит в том, что вы можете импортировать его.
Существует не "путь Python" как таковой, но вы обнаружите, что рекомендуется разместить все ваши модули в одном пакете с именем, связанным с проектом.
Кроме того, чтобы следовать руководству стиля Python, PEP8, имена пакетов и модулей должны быть строчными. Итак, если мы предположим, что проект называется "Статистика ботов", ваша структура будет примерно такой:
botondstats/
indicators/
moving_averages.py
stochastics.py
strategies/
moving_averages_cross.py
example.py
Затем вы найдете класс Стохастик, выполнив
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
Как я использую тестовый бегун Distrubute для запуска тестов.
Как я это делаю.: -)
Ответ 7
Попробуйте python_boilerplate_template
:
https://pypi.python.org/pypi/python_boilerplate_template
Ответ 8
Проект cookiecutter
audreyr
включает в себя несколько шаблонов проектов Python:
В пакете используется один ~/.cookiecutterrc
файл для создания пользовательских шаблонов проектов на языках Python, Java, JS и других языках.
Например, шаблон Python, совместимый с PyPI
:
![cookiecutter-pypackage]()