0

Die Frage, was hat die Verzeichnisstruktur eines Python-Projekt mehrere Male auf Stack-Überlauf (z here, here und here)Warum haben einige Python-Pakete sich wiederholende Verzeichnisnamen?

Und viele Antworten gefragt worden sind gegeben. Aber eine Sache, die in keiner dieser Antworten klar ist, ist, warum einige Projekte sich wiederholende Verzeichnisse haben. Zum Beispiel in this article die oft zitiert wird, das vorgeschlagene Layout ist:

<root>/ 
|-- Twisted/  
| |-- __init__.py 
| |-- README 
| |-- setup.py 
| |-- twisted/ 
| | |-- __init__.py 
| | |-- main.py 
| | |-- test/ 
| | | |-- __init__.py 
| | | |-- test_main.py 
| | | |-- test_other.py 
| | |-- bin/ 
| | | |-- myprogram 

In diesem Beispiel /Twisted/twisted/main.py die Hauptdatei

Aber dann auf der anderen Seite ist haben Sie nach Rat like this:

Viele Entwickler strukturieren ihre Repositories aufgrund der neuen gebündelten Anwendungsvorlagen nur schlecht.

<root>/ 
|-- samplesite/ 
| |-- manage.py 
| |-- samplesite/ 
| | |-- settings.py 
| | |-- wsgi.py 
| | |-- sampleapp/ 
| | |-- models.py 

Dont dies tun.

Repetitive Pfade sind sowohl für Ihre Tools als auch für Ihre Entwickler verwirrend. Unnötiges Verschachteln hilft niemandem. Lassen Sie sich tut es richtig:

<root>/ 
|-- manage.py 
|-- samplesite/ 
| |-- settings.py 
| |-- wsgi.py 
| |-- sampleapp/ 
| |-- models.py 

Meine Frage ist nicht unbedingt, da es auf jede Art und Weise Vor-oder Nachteil sein kann „was viel besser ist?“.

Stattdessen ist meine Frage, wenn ich mit dem vereinfachten zweiten Stil gehe, was werde ich verlieren? Gibt es einen guten Grund, eine /<root>/Twisted/twisted/main.py Verzeichnisstruktur anstatt nur /<root>/twisted/main.py zu haben? Ist es einfacher, meine Anwendung zu teilen oder den import Prozess flüssiger zu machen? Etwas anderes?

Antwort

0

Diese beiden Dokumente sind näher als Sie denken. Sowohl Interesting Things, Largely Python and Twisted Related (Ihr erstes Beispiel) als auch die django-admin startproject Dokumentation gehen davon aus, dass Sie sich außerhalb des Projekt-Repository befinden, während Structuring Your Project (Ihr zweites Beispiel) davon ausgeht, dass Sie sich im Repository befinden. Um zu zitieren, "Nun, sie gehen zu ihrem nackten und frischen Repository und führen die folgenden ...".

Die django docs sagen, dass, wenn Sie

django-admin.py start-project samplesite 

sowohl das Projektverzeichnis und Projektpaket ausgeführt werden benannt und das Projektverzeichnis wird im aktuellen Arbeitsverzeichnis

erstellt werden Der Befehl erstellt das Projektverzeichnis für Sie, sodass Sie bei der Ausführung keinesfalls in einem bereits erstellten Projektverzeichnis sein sollten. Die Dokumente gehen auf

django-admin startproject myproject /Users/jezdez/Code/myproject_repo 

zu sagen, wenn das optionale Ziel vorgesehen ist, Django, dass bestehende Verzeichnis wie das Projektverzeichnis

Nun nehme an, Sie waren schon in /Users/jezdez/Code/myproject_repo verwenden. Dann würden Sie

django-admin startproject myproject . 

erstellen, um das Projektpaket im aktuellen Verzeichnis zu erstellen. Voila, du hast das Beispiel des zweiten Autors! Der Autor hat Ihnen gerade gesagt, dass Sie das erste Formular vermeiden sollten, wenn Sie Ihren Repo erstellen, bevor Sie den Befehl ausführen.

So können Sie Ihre Verzeichnisstruktur neu zeichnen. Im ersten Beispiel ist <root> das Verzeichnis, in dem Sie Ihre Dev-Repos aufbewahren. Twisted ist das Verzeichnis mit Ihrem Repo. (Nebenbei, dieses Verzeichnis sollte keine __init__.py haben, weil es kein Paketverzeichnis ist). Im letzten Beispiel ist <root> das Repo-Verzeichnis selbst. Angenommen ich dieses Verzeichnis DjangoExample genannt, dann würde die Struktur

<root> 
|-- Twisted/  
| |-- __init__.py 
| |-- README 
| |-- setup.py 
| |-- twisted/ 
| | |-- __init__.py 
| | |-- main.py 
| | |-- test/ 
| | | |-- __init__.py 
| | | |-- test_main.py 
| | | |-- test_other.py 
| | |-- bin/ 
| | | |-- myprogram 
| 
|-- DjangoExample/ 
| |-- manage.py 
| |-- samplesite/ 
| | |-- settings.py 
| | |-- wsgi.py 
| | |-- sampleapp/ 
| | |-- models.py 

werden, wie für andere Unterschiede, hat die django App, die django Rahmen Regeln zu folgen, während twised die allgemeineren Python-Paket Regeln folgt.

+0

Ah, das erklärt die scheinbar widersprüchlichen Richtlinien. Vielen Dank! –

2

glaube ich, die am häufigsten Layout Python Projekte so etwas wie dieses:

project/ 
|-- setup.py 
|-- bin/ 
|-- docs/ ... 
|-- examples/ ... 
|-- package/ 
    |-- __init__.py 
    |-- module1.py 
    |-- module2.py 
    |-- subpackage/ ... 
    |-- tests/ ... 

Wo das Projekt der Name des Projekts ist und das Paket ist der Name der Top-Level-Import zum Beispiel scikits- lernen und sklearn. Das Paket enthält alles, was Python importieren kann, und Sie importieren den Paketnamen. Zum Beispiel from package import thing oder from package.module1 import thing. Das Projekt enthält das Paket und alle unterstützenden Dinge wie Dokumente, Beispiele und Installationsskripts. Beachten Sie, dass im Projekt normalerweise __init__.py nicht vorhanden ist, da das Projekt nicht in Python importiert werden kann. Es ist üblich, dass das Projekt und das Paket denselben Namen haben, aber nicht benötigt werden.

+0

Sehr hilfreich - danke. Ich verstehe jetzt den Unterschied zwischen einem Projektverzeichnis und einem Paketverzeichnis. –

Verwandte Themen