2 Stimmen

Python - Das Ausführen des Skripts erfolgt in einem Ei?

Ich habe ein ausführbares Ei erstellt, um es als einzelne ausführbare Datei zu erstellen.

setup.py:

#!/usr/bin/env python
from setuptools import setup, find_packages

setup(
    name='app',
    version='0.5',
    description='foo',
    author='microo8',
    author_email='xxx@email.com',
    packages=["foo", "bar"],
    install_requires=["sqlalchemy>=0.7", "paramiko>=1.7.7.1"],
    entry_points = {
        'setuptools.installation': [
            'eggsecutable = foo.module:main',
        ]
    }
)

Jetzt kann ich es aufrufen: ./app-0.5-py2.7.egg, aber die relativen Pfade sind alle im Ei. Wenn ich in der main-Funktion print __file__ aufrufe, wird /home/user/app-0.5-py2.7.egg/foo/module.py gedruckt. Ich möchte eine Konfigurationsdatei lesen, die sich im gleichen Verzeichnis wie das Ei befinden muss. Und das gleiche Skript muss auch als "non-egg" ausführbar sein, sodass die Konfigurationsdatei im Verzeichnis mit dem Skript liegt.

Wie kann ich herausfinden, dass das Skript aus einem Ei ausgeführt wird und auch den Eipfad?

0voto

Martijn Pieters Punkte 953257

Sie sollten Ihre Konfigurationsdatei mit dem ResourceManager API laden. Auf diese Weise kann Ihr 'eggified' Code die Konfigurationsdatei auch dann laden, wenn sie komprimiert ist.

import pkg_resources
configdata = pkg_resources.resource_string(__name__, "myconfigfile.cfg")

Das API kann auf Existenz überprüfen, Verzeichnisse testen, Daten lesen oder Ihnen ein geöffnetes Dateiobjekt für jede Ressource bereitstellen, die Teil Ihres Eggs ist.

Das API kümmert sich um alle Details; es wird z.B. Dateien in ein temporäres Verzeichnis extrahieren, wenn Sie unbedingt einen Dateinamen für eine Ressource benötigen, aber aus einem komprimierten Egg heraus ausgeführt werden.

Vor allem wird es funktionieren, unabhängig davon, ob Sie tatsächlich als Egg installiert sind oder eigenständig.

0voto

microo8 Punkte 3284

Also wenn ich nicht weiß, wie ich überprüfen kann, ob das laufende Skript in einem Ei ist, kann der Konfigurationsdateipfad mit folgendem erhalten werden: os.path.realpath('config.cfg').

Dies passt zu mir und wenn ich ein Verzeichnis mit dem ausführbaren Ei und einer Konfigurationsdatei habe, ist dies ein korrekter Pfad.

Auch wenn ich nur das Skript im Verzeichnis mit der Konfigurationsdatei habe, ist es ebenfalls korrekt.

Und auch wenn ich pyinstaller verwende, um eine einzelne ausführbare Datei zu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X