Ich bin neu in Python und starte ein Mini-Projekt, aber ich habe einige Zweifel, wie ich die Ordner auf "Python-Weise" organisieren soll.
Ich verwende PyDev
in meiner Entwicklungsumgebung, und wenn ich ein neues Projekt erstelle, wird ein Ordner mit dem Namen erstelltsrc
+ src
Jetzt PyDev
kann ich in der erstellen Pydev Module
undPyDev Package
Ich muss mein Projekt folgendermaßen organisieren:
+ Indicators
- Moving_averages.py
- Stochastics.py
+ Strategies
- Moving_averages_cross.py
- example.py
Wie kann ich dies in Bezug auf Module und Pakete organisieren? Was bedeuten Module und Pakete?
Freundliche Grüße,
Antworten:
Ein Paket ist im Grunde ein Ordner mit einer
__init__.py
Datei darunter und normalerweise einigen Modulen, wobei Modul eine*.py
Datei ist. Es hatimport
hauptsächlich damit zu tun . Wenn Sie__init__.py
Indikatoren hinzufügen , können Sie Folgendes verwenden:from Indicators.Stochastics import *
oder
from Indicators import Stochastics
Übrigens würde ich empfehlen, Modul- / Paketnamen in Kleinbuchstaben zu halten. Es hat keinen Einfluss auf die Funktionalität, ist aber eher "pythonisch".
quelle
Aus Sicht des Dateisystems ist ein Modul eine Datei, die mit endet,
.py
und ein Paket ist ein Ordner, der wieder Module und (verschachtelte) Pakete enthält. Python erkennt einen Ordner als Paket, wenn er eine__init__.py
Datei enthält .Eine solche Dateistruktur
definiert das Paket
some
, das ein Modul enthält,foofoo
und ein verschachteltes Paketthing
, das wiederum ein Modul enthältbarbar
. Wenn Sie jedoch Pakete und Module verwenden, unterscheiden Sie diese beiden Typen nicht wirklich:import some some.dothis() # dothis is defined in 'some/__init__.py' import some.foofoo # <- module import some.thing # <- package
Bitte folgen Sie PEP8, wenn Sie die Benennung Ihrer Pakete / Module auswählen (dh Kleinbuchstaben verwenden).
quelle
foofoo.py
wenn ich nur einige importiere? Ich bin verwirrt über die__init__.py
, was soll ich dort setzen?Siehe Python-Paket-Vorlage
Verzeichnisaufbau
Katze 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
quelle
https://github.com/vital-fadeev/python-package-template
ist nicht mehr gültig. Wo ist diese Python-Paket-Vorlage zu finden?Vielleicht möchten Sie sich die Bibliothek für moderne Paketvorlagen ansehen. Es bietet eine Möglichkeit, ein wirklich schönes Grundlayout für ein Projekt einzurichten, das Sie durch einige Fragen führt und Ihnen dabei hilft, etwas zu finden, das sich relativ einfach verteilen lässt.
http://pypi.python.org/pypi/modern-package-template
quelle
Bevor Sie sich für eine Projektstruktur entscheiden, sollten Sie sich fragen, was der Zweck des Projekts sein wird. Wird dies eine einmalige Analyse sein? Ein Spielzeugkonzept, das Sie untersuchen möchten? Ein ausgewachsenes Projekt, das Sie vertreiben möchten? Der Aufwand für die Strukturierung Ihres Projekts ist unterschiedlich.
Wenn Sie Ihr Projekt so strukturieren möchten, dass Sie es später verteilen können und es auf viele Module skaliert werden kann, empfehle ich die folgende Struktur:
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
Die detaillierten Gründe, warum mir diese Struktur gefällt, finden Sie in meinem Blogbeitrag. Das Wesentliche ist jedoch, dass das hierarchisch niedrigere
projectname
Verzeichnis Ihr eigentliches Projekt enthält. Daneben finden Sie alle Tools, mit denen Sie es verwalten (git) und verpacken (setup.py, MANIFEST.in) können.quelle
python3 -m projectname
?Ein Paket ist ein Verzeichnis mit einem
__init__.py
darin. Der Unterschied zu einem Verzeichnis besteht darin, dass Sie es importieren können.Es gibt an sich keinen "Python-Weg", aber Sie werden feststellen, dass es eine gute Idee ist, alle Ihre Module in einem Paket mit einem projektbezogenen Namen zusammenzufassen.
Um dem Python-Styleguide PEP8 zu folgen, sollten die Paket- und Modulnamen in Kleinbuchstaben angegeben werden. Wenn wir also annehmen, dass das Projekt "Botond Statistics" heißt, würde Ihre Struktur ungefähr so aussehen:
Sie würden dann die Stochastik-Klasse finden, indem Sie dies tun
from botondstats.indicators.stochastics.Stochastics
(Es gibt verschiedene Möglichkeiten, die Struktur beizubehalten, aber die Importe zu verkürzen, aber das ist eine andere Frage).
Sie können diese Struktur unterstellen,
src/
wenn Sie möchten, dies ist jedoch nicht erforderlich. Ich mache nie. Stattdessen habe ich ein Hauptverzeichnis:BotondStatistics/ docs/ botonstats/ # the above structure setup.py # Distutils/distribute configuration for packaging.
In diesem Verzeichnis habe ich normalerweise auch eine virtuelle Umgebung, also habe ich tatsächlich auch bin / lib / et al. Die Entwicklung erfolgt normalerweise durch Ausführen
Da benutze ich den Distrubute Test Runner um die Tests durchzuführen.
So mach ich es. :-)
quelle
Versuchen Sie
python_boilerplate_template
:https://pypi.python.org/pypi/python_boilerplate_template
quelle
Das
cookiecutter
Projektaudreyr
enthält mehrere Python-Projektvorlagen:Das Paket verwendet eine einzelne
~/.cookiecutterrc
Datei, um benutzerdefinierte Projektvorlagen in Python, Java, JS und anderen Sprachen zu erstellen.Zum Beispiel eine Python-Vorlage, die kompatibel ist mit
PyPI
:quelle