Frage

Ich denke, wie eine entfaltete Python-Anwendung anzuordnen, die eine

haben
  1. Executable Skript befindet sich im Verzeichnis / usr / bin /, die eine CLI-Funktionalität in implementiert liefert
  2. Eine Bibliothek installiert, wo die aktuelle Website-Pakete Verzeichnis ist.

Nun, zur Zeit, ich habe die folgende Verzeichnisstruktur in meinen Quellen:

foo.py
foo/
  __init__.py
  ...

was ich denke, ist nicht der beste Weg, Dinge zu tun. Während der Entwicklung funktioniert alles wie erwartet jedoch, wenn im Einsatz, das „von foo import FooObject“ Code in foo.py versucht scheinbar foo.py selbst zu importieren, die nicht das Verhalten, die ich suche.

Die Frage ist also, was ist die gängige Praxis von Situationen wie diese zu orchestrieren? Eines der Dinge, die ich ist denken konnte, bei der Installation, foo.py nur foo umbenennen, die sie sich von den Import stoppt, aber das scheint eher umständlich ...

Ein weiterer Teil des Problems, nehme ich an, dass es sich um eine Name Herausforderung ist. Vielleicht rufen Sie die ausführbare Skript foo-bin.py?

War es hilfreich?

Lösung

dieser Artikel ist ziemlich gut, und zeigt Ihnen einen guten Weg, es zu tun. Der zweite Punkt von der Do Liste beantwortet Ihre Frage.

schamlos kopieren und einfügen:

  

Dateisystem-Struktur eines Python-Projekt

     

von Jp Calderone

     

:

     
      
  • benennen das Verzeichnis etwas zu Ihrem Projekt. Zum Beispiel, wenn Ihr   Projekt „Twisted“ genannt, nennen die   Top-Level-Verzeichnis für seine Quelle   Dateien Twisted. Wenn Sie das tun Mitteilungen,   Sie sollten eine Versionsnummer enthalten   Suffix:. Twisted-2.5
  •   
  • ein Verzeichnis Twisted/bin erstellen und ausführbare Dateien dort setzen, wenn Sie   welche haben. Geben sie nicht eine .py   Erweiterung, auch wenn sie Python   Quelldaten. Stellen Sie keinen Code in   sie außer einem Import von und Aufruf an ein   Hauptfunktion irgendwo anders definiert   in Ihren Projekten.
  •   
  • Wenn Ihr Projekt ist ausdrückbar als eine einzelne Python-Quelldatei, legt es dann   in das Verzeichnis und Namen   etwas zu Ihrem Projekt. Zum   Beispiel Twisted/twisted.py. Wenn du   müssen mehrere Quelldateien, erstellen   Paket statt (Twisted/twisted/,   mit einem leeren   Twisted/twisted/__init__.py) und Platz   Ihre Quelldateien in ihm. Zum Beispiel,   Twisted/twisted/internet.py.
  •   
  • setzen Sie Ihre Unit-Tests in einem Unterpaket des Pakets (Anmerkung - das bedeutet,   dass die einzige Python-Quelldatei   Option oben war ein Trick - man immer   mindestens eine andere Datei benötigen für Ihre   Einheit Tests). Zum Beispiel,   Twisted/twisted/test/. Natürlich machen   es ist ein Paket mit   Twisted/twisted/test/__init__.py.   Die Prüfungen in Dateien wie   Twisted/twisted/test/test_internet.py.
  •   
  • hinzufügen Twisted/README und Twisted/setup.py zu erklären und   Installieren der Software bzw.   wenn Sie das Gefühl schön.
  •   
     

Sie nicht:

     
      
  • setzen Sie Ihre Quelle in einem Verzeichnis namens src oder lib. Das macht es schwer,   läuft ohne Installation.
  •   
  • setzen Sie Ihre Tests außerhalb Ihrer Python-Paket. Das macht es schwer,   die Tests gegen ein installiertes   Version.
  •   
  • ein Paket erstellen, das nur einen __init__.py hat und setzen Sie dann den gesamten Code in __init__.py. So stellen Sie ein Modul   anstelle eines Pakets, es ist einfacher.
  •   
  • versuchen, mit magischen Hacks zu entwickeln, um Python Lage zu machen das Modul importieren   oder das Paket, ohne die Benutzer hinzufügen zu müssen   das Verzeichnis enthält es um ihre   Importpfad (entweder über oder PYTHONPATH   ein anderer Mechanismus). Du wirst nicht   korrekt verarbeiten alle Fälle und Benutzer   an Sie werden wütend, wenn Ihr   Software funktioniert nicht in ihrer   Umwelt.
  •   

Andere Tipps

Distutils unterstützt Module, Pakete zu installieren, und Skripte . Wenn Sie ein distutils setup.py schaffen, die als Paket und foo als Skript foo.py bezieht, dann sollte foo.py auf /usr/local/bin erhalten installiert oder was auch immer das entsprechende Skript Installationspfad auf dem Ziel-Betriebssystem ist, und das foo Paket sollte das site_packages Verzeichnis installiert werden .

Sie sollten die ausführbare Datei nur foo nennen, nicht foo.py, dann versucht foo importieren wird es nicht verwenden.

Wie es richtig zu benennen: das ist schwierig in der Zusammenfassung zu beantworten; wir müssten wissen, was konkret sie tut. wenn sie und steuert zum Beispiel konfiguriert, nannte es -config oder ctl könnte angemessen sein. Wenn es ein Shell-API für die Bibliothek ist, sollte es den gleichen Namen wie die Bibliothek haben.

Ihr CLI-Modul ist eine Sache, das Paket, das es ist eine andere Sache unterstützt. Verwechseln Sie nicht die Namen Modul foo Withe (in einer Datei foo.py) und das Paket foo (in einem Verzeichnis foo mit einer Datei __init__.py).

Sie haben zwei Dinge genannt foo: ein Modul und ein Paket. Was wollen Sie foo nennen? Eine Klasse? Eine Funktion? Eine Variable?

Wählen Sie einen eindeutigen Namen für das foo-Modul oder das Paket foo. foolib zum Beispiel ist ein beliebtes Paketnamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top