Frage

Ich habe eine einfache Python-Anwendung, wo meine Verzeichnisstruktur folgt, ist wie:

  • Projekt /
    • main.py
    • config.py
    • plugins /
      • plugin1
      • plugin2
      • ...

Config.py nur Lasten Konfigurationsdateien, es enthält keine Konfigurationsinformationen in sich selbst.

Ich möchte jetzt dieses Programm verteilen, und ich dachte, ich Setuptools, es zu tun verwenden würde. Die Datei Benutzer sind zu erwarten ist main.py, so dass man geht eindeutig in / usr / sind und der Rest der Dateien geht in / usr / share / Projekt.

Aber es gibt ein Problem: Ich würde irgendwie main.py muß sagen, für config.py im Aktienbuch zu suchen. Aber ich kann wirklich nicht sicher sein, wo genau das Freigabeverzeichnis ist da, das ist bis zu Setuptool, nicht wahr?

Was ist die beste Praxis bei der Verteilung von Python-basierte Anwendungen?

War es hilfreich?

Lösung

Setuptools Ihr Paket an einer Stelle installieren, die von Python heißt erreichbar ist, können Sie sie importieren:

import project

das Problem zu erhöhen, wenn Sie relative Importe anstelle von absoluten Importen tun. wenn Ihr main.py Importe config.py funktioniert es, weil sie im selben Verzeichnis befinden. wenn Sie Ihre main.py an einem anderen Ort wie /usr/bin oder einen anderen Ort in PATH Umgebungsvariable, Python versucht Import config.py von sys.path und nicht von Ihrem Paket dir bewegen. die Lösung ist absolut Import zu verwenden:

from project import config

Jetzt main.py ist "beweglich".

Eine andere Lösung, die ich bevorzuge, ist die Verwendung von automatischen Skripterstellung angeboten von Setuptools .

anstelle des Codes mit in einem

if __name__ == "__main__":
    # here all your beautiful code

Anweisung, setzen Sie Ihren Code in einer Funktion (Haupt einen guten Namen sein könnte):

def main():
    # put your code here

if __name__ == "__main__":    # not needed, just in case...
    main()

Jetzt ändern Sie Ihre setup.py:

setup(
    # ...
    entry_points = {
        "console_scripts": [
            # modify script_name with the name you want use from shell
            # $ script_name [params]
            "script_name = project.main:main",
        ],
    }
)

das ist alles. nach einer Installation Setuptools wird ein Wrapper-Skript erstellen, die von Shell aufrufbar ist und dass Anrufe Ihre Hauptfunktion. jetzt main.py kann in Ihrem Projektverzeichnis lebt und Sie brauchen nicht mehr in einem bin/ Verzeichnis zu verschieben. Beachten Sie, dass Setuptools setzt automatisch das Skript im bin/ Verzeichnis in Bezug auf die Installation Präfix.

es.

python setup.py install --prefix ~/.local

Installieren des Projektpaketes in

~/.local/lib/python<version>/site-packages/<package_name>

und Ihr Skript in

~/.local/bin/<script_name>

so sicher sein, dass ~/.local/bin vorhanden ist in der PATH env.

Weitere Informationen unter: http://peak.telecommunity.com/DevCenter / Setuptools # automatische-Skript-Erstellung

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