Partieller Import möglich?

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.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Naja, in der "skript.py" wird "import PackageA" ausgeführt. Im Moment noch ohne try...except und dann wir die Application-Class von jenem Packet instanziert und der MainLoop gestartet. (Grob dargestellt) Indem ich aber "PackageA" importiere, importiere ich *alles* aus allen anderen Subpackages und -modulen ebenfalls. Wenn also eines dieser Pakete/Module etwas importiert was nicht vorhanden ist -> Ende.

Und genau in diesem Fall, möchte ich aber den Dialog den ich für die Fehlerberichterstattung benutze trotzdem importieren und benutzen können. Aber ohne partiellen Import tritt der selbe ImportError dann wieder auf. ;) Klar, ich kann den Dialog auslagern, aber das will ich ja gerade verhindern.
BlackJack

@Gremlin: Genau das wäre aber wohl die saubere Lösung.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

deets hat geschrieben:
snafu hat geschrieben:Dein Problem mit py2exe liegt halt in der Natur der Sache bei vorkompilierten Programmen. Natürlich muss dies immer für die Plattform gemacht werden, auf der es eingesetzt werden soll. Das Problem bestünde natürlich nicht, wenn sich deine User selber Python herunterladen würden, um dann den Quellcode auszuführen. Du kannst ja eine Anleitung schreiben oder ein Installationsskript.
Joa, und darum ist Linux auch so ein bahnbrechender Erfolg auf dem Desktop beschert.

Es gibt Endanwender, die sich - sehr zu Recht - mit solchen Dingen nicht beschaeftigen sollen. Mein Vater (auf Ubuntu 10.04) hat mich neulich gefragt, wie er denn den neuen FireFox 4 bekommt. Tjoa. Er surft erstmal mit 3 weiter. Denn so leicht es fuer mich selbst ist, mal kurz nen PPA einzurichten, dem alten Herren ist das nicht zuzumuten.
Ich weiß nicht, wie du jetzt auf Linux kommst. Die Dinger aus dem PPA haben letztlich das selbe Problem: Wenn man nicht gerade für verschiedenste Architekturen und für etliche Derivate Pakete gebaut hat, dann muss der Endanwender auch sehen, dass er möglichst ein vielbenutztes System verwendet (prominentes Beispiel wäre wohl Ubuntu), wenn er das Paket verwenden will. Im Übrigen fehlt für den Schritt, dass jeder Anfänger ein PPA installieren kann, ja eigentlich nur etwas analoges zu `apturl` - also ein Browser-Plugin für eine 1-Klick-Installation. Und versteh mich bitte nicht falsch: Ich bin ebenfalls kein Freund von Selberkompilieren und froh, dass mir das allermeiste fertig vor die Nase gesetzt wird. Trotzdem bleibt es ja wohl Fakt, dass Automatisierungsprozesse in dieser Hinsicht plattformbedingte Einschränkungen mit sich bringen. Wenn es für Windows irgendein cooles Installationsskript-Framework gäbe, dass auf dem Rechner nach einer Python-Installation suchen, bei Abhängigkeiten ggf `easy_install` bzw `pip` zur Verwendung installieren kann usw, dann bräuchte man sowieso keine "Python-Compiler" mehr.
deets

so wie sich das anhoert dann also doch Seiteneffekte. Mir will nicht so recht klarwerden, warum es ein Problem sein soll, grob gesagt sowas zu machen:

Code: Alles auswählen

# skript.py

import sichere_sache

try:
    import PackageA
except ImportErro:
    sichere_sache.toller_report()


Es gibt unter Umstaenden schon Moeglichkeiten, mit den in PEP302 dargestellten Import-Hooks weiterzukommen. Aber ich halte das fuer verschwurbelt und letztlich nicht wirklich robuster.
deets

snafu hat geschrieben: Ich weiß nicht, wie du jetzt auf Linux kommst.
Ganz einfach - weil es ja die Linux-Attituede ist, jemandem das RTFM eines INSTALL-Files an den Kopp zu hauen ;) Natuerlich kann man genauso auf anderen Plattformen vorgehen, aber unter Linux ist es halt verbreitet, und ist IMHO mitverantwortlich fuer den eher maessigen Desktoperfolg.
snafu hat geschrieben: Die Dinger aus dem PPA haben letztlich das selbe Problem: Wenn man nicht gerade für verschiedenste Architekturen und für etliche Derivate Pakete gebaut hat, dann muss der Endanwender auch sehen, dass er möglichst ein vielbenutztes System verwendet (prominentes Beispiel wäre wohl Ubuntu), wenn er das Paket verwenden will. Im Übrigen fehlt für den Schritt, dass jeder Anfänger ein PPA installieren kann, ja eigentlich nur etwas analoges zu `apturl` - also ein Browser-Plugin für eine 1-Klick-Installation. Und versteh mich bitte nicht falsch: Ich bin ebenfalls kein Freund von Selberkompilieren und froh, dass mir das allermeiste fertig vor die Nase gesetzt wird. Trotzdem bleibt es ja wohl Fakt, dass Automatisierungsprozesse in dieser Hinsicht plattformbedingte Einschränkungen mit sich bringen. Wenn es für Windows irgendein cooles Installationsskript-Framework gäbe, dass auf dem Rechner nach einer Python-Installation suchen, bei Abhängigkeiten ggf `easy_install` bzw `pip` zur Verwendung installieren kann usw, dann bräuchte man sowieso keine "Python-Compiler" mehr.
Das ist alles richtig und schoen - mir ging's aber um den konkreten Fall, das der gute Gremlin nunmal Endanwender-Software bereitstellen mag, du ihm aber vorschlugst, das ganze doch zum selbst-basteln anzubieten. Das loest aber nicht sein Problem, sondern verlagert es auf die Endanwender-Schultern, die das ueblicherweise nicht verkraften.

Das ganze Thema Package-Managment usw. ist sowieso ziemlich heftig - auch und gerade dann noch mit der Interaktion Python/PyPI.

Auf der Europython 2009 habe ich den Talk eines Amis gesehen, der versucht hat, mit MS zusammen build-bots zu bauen, damit Entwickler eben genau die Chance haben, fuer die verschiedenen Plattformen zu entwickeln. Hab davon nie wieder was gehoert :(
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

deets hat geschrieben:Das ist alles richtig und schoen - mir ging's aber um den konkreten Fall, das der gute Gremlin nunmal Endanwender-Software bereitstellen mag, du ihm aber vorschlugst, das ganze doch zum selbst-basteln anzubieten. Das loest aber nicht sein Problem, sondern verlagert es auf die Endanwender-Schultern, die das ueblicherweise nicht verkraften.
Ich habe ihm 2 Sachen vorgeschlagen: Entweder Installationsanleitung oder Installationsskript. Mit letzterem ist etwas gemeint, das die Konfiguration auf dem Rechner untersucht und nur wenn nötig zusätzliche Dinge installiert. Ich weiß, dass das in der Realität anders aussieht, weil der Entwickler letztlich auch keine Lust hat, sich mit sowas auseinander zu setzen. Im Regelfall behandelt man lieber quasi die Symptome und bietet mehrere Varianten des "Binaries" an. Ist ja nicht so, dass die Diskussion zum ersten Mal geführt wird. ;)
deets

@snafu

Aber keines von beiden loest sein Problem. Wenn er die Probleme mit einem Installations-Skript antizipieren kann, dann baut er gleich seine Binaries.

Das Problem tritt doch auf, wenn etwas unvorhergesehenes wie binaere Inkompatibilitaet auftritt.

Man kann unter Linux darueber streiten, ob man nicht einfach alles in der Quelle verfuegbar macht (und die Existenz von Gentoo ist der Beleg fuer diesen Ansatz). Aber zum einen setzt das Open Source vorraus, und zum anderen einen verfuegbaren Compiler. Zumindest letzteres ist unter Windows nicht der Fall, und selbst unter OSX und Linux muss man das erst installieren.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@deets:

Wir reden aber immer noch von Python-Skripten, oder? :o
deets hat geschrieben:Aber zum einen setzt das Open Source vorraus, und zum anderen einen verfuegbaren Compiler. Zumindest letzteres ist unter Windows nicht der Fall, und selbst unter OSX und Linux muss man das erst installieren.
Man muss alles erstmal installieren, damit es verfügbar ist - sogar Python. Klingt komisch, ist aber so.
BlackJack

@snafu: Wir reden zwar von Python aber auch da brauchen einige Sachen zum installieren einen C-, C++-, oder gar Fortran-Compiler. Das sind halt so Sachen die der durchschnittliche Windows-Anwender a) normalerweise nicht installiert hat und b) auch nicht einfach über die Paketverwaltung nachrüsten kann.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Also ich rede zumindest von dem Skript des OP, von dem wir im Detail bisher überhaupt nichts wissen. Von daher kann man auch nicht sagen, ob sich irgendein Anwender jetzt einen Fortran-Compiler installieren muss. :roll:
BlackJack

@snafu: Wenn man es nicht weiss, muss man IMHO einfach erst einmal davon ausgehen, dass dem so ist.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

deets hat geschrieben:Es gibt unter Umstaenden schon Moeglichkeiten, mit den in PEP302 dargestellten Import-Hooks weiterzukommen. Aber ich halte das fuer verschwurbelt und letztlich nicht wirklich robuster.
Möglich. Aber das war das erste was mir einfiel. Und jetzt wo ich weiß dass es geht, will ich das natürlich auch ausprobieren. :mrgreen: Ob es nicht das "wahre" ist, werd ich spätestens dann selbst merken.
snafu hat geschrieben:Man muss alles erstmal installieren, damit es verfügbar ist - sogar Python.
Genau das ist das Problem. Ich bin C# oder gar C++ nicht mächtig und muss deshalb erstmal mit Python zurecht kommen, was wiederum ein Interpreter ist, der zusätzlich zu meinem "Programm" gebraucht wird. Dazu kommen noch fünf andere libraries und schnell stellt sich der Benutzer die Frage, woher diese ganzen neuen Programme kommen, sofern er sie denn nicht schon selbst installieren muss. Ich z.B. bin so jemand, der, wenn der die Wahl hat, sich für die Software entscheidet die möglichst "schlank" ist. (Bereits wenn ein Programm das .net-Framework braucht krieg ich schon meist die Krätze. :lol: )

Ach und nen Compiler braucht bei mir nichts. Jedenfalls nicht dass ich wüsste, zumal ich bei allem auch so ganz "tolle" Installer benutze. :roll: (Wohlgemerkt unterschiedliche (32bit, 64bit) also denk ich mal das ist alles precompiled.)
deets

snafu hat geschrieben:@deets:

Wir reden aber immer noch von Python-Skripten, oder? :o
deets hat geschrieben:Aber zum einen setzt das Open Source vorraus, und zum anderen einen verfuegbaren Compiler. Zumindest letzteres ist unter Windows nicht der Fall, und selbst unter OSX und Linux muss man das erst installieren.
Man muss alles erstmal installieren, damit es verfügbar ist - sogar Python. Klingt komisch, ist aber so.
*seufz* Der OP hat von Bibliotheken gesprochen, die aufgrund von 32/64-Bit bei der Ausfuehrung Probleme gemacht haben. Also mehr als "nur" Python-Skripten. Dafuer braucht man im Zweifel Compiler, wenn man die zB als Source mitliefert. Aber natuerlich muss man alles moegliche installieren, inklusive eines OS.

Worueber wir hier meiner Ansicht nach geredet haben ist, ob man einem Endanwender eine Liste von Abhaengikeiten, einen Haufen Source-Code, und den Wunsch nach viel Glueck in die Hand drueckt. Oder ob man eine geschlossene Installation anbietet. So wie ich den OP verstanden habe, ist er fuer letzteres. Und ich auch.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

deets hat geschrieben:Worueber wir hier meiner Ansicht nach geredet haben ist, ob man einem Endanwender eine Liste von Abhaengikeiten, einen Haufen Source-Code, und den Wunsch nach viel Glueck in die Hand drueckt. Oder ob man eine geschlossene Installation anbietet. So wie ich den OP verstanden habe, ist er fuer letzteres. Und ich auch.
Auch ich bin für letzteres. Fragt sich nur, ob man das, was bei py2exe, PyInstaller und dergleichen rauskommt, eine geschlossene Installation nennen kann. Ich wäre da eher für eine .msi-Datei, so wie man es ja auch häufig vorfindet, anstatt dass irgendwelches Binaries angeboten werden, wo Python fest integriert ist.

Übrigens bin ich gerade auf bdist_nsi gestoßen, welches die Art von Installer erzeugen sollte, auf die ich mich bezog. Und hier gibt es sogar ein "Installer-Framework", das auf py2exe aufzubauen scheint.
deets hat geschrieben:Der OP hat von Bibliotheken gesprochen, die aufgrund von 32/64-Bit bei der Ausfuehrung Probleme gemacht haben. Also mehr als "nur" Python-Skripten.
Also zumindest in meinem ersten Beitrag zu dem Thema ging ich noch von einem Python-Skript ohne weitere Abhängigkeiten aus. So eine kaputte DLL kann ja auch etwas sein, dass vom Interpreter benötigt wird und folglich selbst bei einem "Hallo Welt"-Programm dabei ist. Daher bezog sich der Vorschlag mit der Installationsanleitung ja auch lediglich auf eine Art Hinweis, wo man Python herunterladen kann. Ich hatte damit nicht im Sinn, ernsthaft in Erwägung zu ziehen, dass sich die Windows-User irgendwelche Bibliotheken kompilieren sollen.
Antworten