with open Pfad MacOS kompilierte App

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mrrockkz
User
Beiträge: 12
Registriert: Donnerstag 2. März 2023, 15:24

Hallo liebe Phyton-Forum.de-User,

ich habe ein Python-Script bei dem ich auf eine weitere Datei zugreife.

Code: Alles auswählen

with open('datei.txt', 'r') as f:
Mit --add-data wird die Datei nicht mit ins Paket geschrieben, diese kann man ja aber danach einfach in Contents/Resources/ manuell einfügen. Doch was für einen Pfad muss ich im Code angeben, dass dieser sicher gelesen wird (auch falls sich die App nicht in Programme befindet)?

Ich hoffe ihr versteht meine doch recht kompliziert gestellte Frage.

Liebe Grüße
Benutzeravatar
sparrow
User
Beiträge: 4512
Registriert: Freitag 17. April 2009, 10:28

Welche Art von Paket baust du?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ein application bundle.

Der übliche Trick besteht im langhangeln am Pfad ausgehend von __file__. Abhängig davon, was du mit macOS machst, kannst du aber auch NSBundle und seine Methoden benutzen.
mrrockkz
User
Beiträge: 12
Registriert: Donnerstag 2. März 2023, 15:24

__deets__ hat geschrieben: Donnerstag 11. Mai 2023, 23:02 Ein application bundle.

Der übliche Trick besteht im langhangeln am Pfad ausgehend von __file__. Abhängig davon, was du mit macOS machst, kannst du aber auch NSBundle und seine Methoden benutzen.
Danke dir.

Der Code lautet nun:

Code: Alles auswählen

from Foundation import NSBundle

        bundle = NSBundle.mainBundle()
        file_path = bundle.pathForResource_ofType_(os.path.splitext("datei.txt")[0], os.path.splitext("datei.txt")[1][1:])

        with open(file_path, "r") as f:
Es funktioniert wenn das Script kompiliert ist einwandfrei. Jedoch zeigt mir PyCharm (obwohl ich "pyobjc-framework-Cacoa" in Python Package installiert habe) folgende Error-Meldung: Cannot find reference 'NSBundle' in '__init__.py | __init__.py'
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Joa. Das ist halt das drangefrickelte Typechecking von Python. Das benutze ich nicht, und es hat auch außer roten Kringeln und verwirrten Anfängern keinerlei Konsequenzen.
mrrockkz
User
Beiträge: 12
Registriert: Donnerstag 2. März 2023, 15:24

__deets__ hat geschrieben: Freitag 12. Mai 2023, 09:42 Joa. Das ist halt das drangefrickelte Typechecking von Python. Das benutze ich nicht, und es hat auch außer roten Kringeln und verwirrten Anfängern keinerlei Konsequenzen.
Alles klar. Danke dir. Dann ist mein "Problem" gelöst :-)
Antworten