tablas permisos para leer grupos funciones datos python pydev project-organization

permisos - ¿Cómo organizar un proyecto de Python?



funciones de pandas para leer datos a tablas (8)

Soy nuevo en Python y estoy empezando un mini proyecto. pero tengo algunas dudas sobre cómo organizar las carpetas en el "Python Way".

Estoy usando PyDev en mi entorno de desarrollo, y cuando creo un nuevo proyecto, se crea una carpeta llamada "src"

+ src

Ahora, en PyDev puedo crear "Módulo Pydev" y "Paquete PyDev"

Necesito organizar mi proyecto de la siguiente manera:

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

¿Cómo puedo organizar esto en términos de módulos y paquetes? ¿Cuál es el significado de módulos y paquetes?

Atentamente,


Antes de decidir sobre una estructura de proyecto, es bueno preguntarse cuál será el propósito del proyecto. ¿Esto será un análisis único? ¿Un concepto de juguete que quieres investigar? ¿Un proyecto completo que pretendes distribuir? La cantidad de esfuerzo que desea poner en la estructuración de su proyecto será diferente.

  • Si se trata de un análisis único, me gusta usar los portátiles ipython . El portátil capturará el flujo de sus pensamientos, y puede agregar notas en el marcado a su código para referencia posterior.
  • Si desea investigar un concepto de juguete, me parece que un enfoque simple y rápido funciona mejor. Desea poder implementar rápidamente su concepto para descubrir si es factible y, por lo tanto, vale la pena dedicarle más tiempo. Parte de la filosofía de Python es "No intentes la perfección porque" lo suficientemente bueno "a menudo es solo eso". Siempre puede regresar más tarde y estructurar su proyecto de una manera que siga las mejores prácticas de ingeniería de software.
  • Si desea estructurar su proyecto para luego poder distribuirlo, y para que se adapte a muchos módulos, recomiendo la siguiente estructura:

    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

Las razones detalladas por las que me gusta esta estructura están en mi publicación de blog , pero la esencia básica es que el directorio de nombre de proyecto de nivel jerárquicamente inferior contiene su proyecto real. A su lado están todas las herramientas que ayudan a administrar (git) y empaquetar (setup.py, MANIFEST.in).


Desde la perspectiva del sistema de archivos, un módulo es un archivo que termina con .py y un paquete es una carpeta que contiene módulos y paquetes (anidados) de nuevo. Python reconoce una carpeta como un paquete si contiene un archivo __init__.py .

Una estructura de archivos como esa

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

define el paquete como some , que tiene un módulo foofoo y una thing paquete anidado, que nuevamente tiene una barbar módulo. Sin embargo, al usar paquetes y módulos, realmente no distingue estos dos tipos:

import some some.dothis() # dothis is defined in ''some/__init__.py'' import some.foofoo # <- module import some.thing # <- package

Siga PEP8 al seleccionar el nombre de sus paquetes / módulos (es decir, utilice nombres en minúsculas).



Es posible que desee consultar la librería de plantilla de paquete moderno. Proporciona una forma de configurar un diseño básico realmente agradable para un proyecto que lo guía a través de algunas preguntas y trata de ayudarlo a obtener algo que pueda distribuirse con bastante facilidad.

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



Un paquete es básicamente una carpeta con el archivo __init__.py debajo de él y generalmente algunos módulos, donde el módulo es un archivo *.py . Tiene que ver con la import principalmente. Si agrega __init__.py a Indicadores, puede usar:

from Indicators.Stochastics import *

o

from Indicators import Stochastics

Por cierto, recomendaría mantener los nombres de módulos / paquetes en minúsculas. No afecta la funcionalidad pero es más "pitónico".


Un paquete es un directorio con un __init__.py en él. La diferencia con un directorio es que puedes importarlo.

No existe un "camino de Python" per se, pero encontrará que es una buena idea colocar todos sus módulos en un paquete con un nombre relacionado con el proyecto.

Además, para seguir la guía de estilo de Python, PEP8, los nombres de los paquetes y módulos deben ser minúsculos. Entonces, si asumimos que el proyecto se llama "Estadísticas de Botond", su estructura sería algo como esto:

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

Luego encontrarías la clase estocástica haciendo

from botondstats.indicators.stochastics.Stochastics

(Hay varias maneras de mantener la estructura pero reducir las importaciones, pero esa es otra cuestión).

Puede poner esta estructura bajo src/ si lo desea, pero no es necesario. Yo nunca. En cambio, tengo un directorio principal:

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

En este directorio también normalmente tengo un virtualenv así que en realidad también tengo bin / lib / et al. El desarrollo se realiza normalmente ejecutando

./bin/python setup.py tests

Como utilizo el corredor de prueba Distrubute para ejecutar las pruebas.

Así es como lo hago. :-)


Ver python-package-template

Estructura de directorios

. |-- 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

gato 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