[Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

Re: [Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Sa, 20.02.2016 14:34

gibt es das Dokument "Kostenabrechnung.ods" nicht zum Download oder übersehe ich das nur?
Nein und nein. Aus im Wesentlichen drei Gründen, die ich nicht diskutieren möchte:
  • Die Datei ist für den Gebrauch einiger weniger Personen vorgesehen und ist daher in Teilen persönlich. Was nicht heißt, dass man sie nicht anonymisieren könnte.
  • Der real existierende Kontext kann nicht als allgemein bekannt angenommen werden und müsste heftig erläutert werden.
  • Der wichtigste Grund aber ist, dass ich als Blinder nicht glaube, andere Blinde führen zu können. Ich betrachte mich immer noch als Anfänger in der Python-Programmierung und staune immer wieder, wenn ich Problemlösungen von Könnern sehe. Wenn ich die Kostenabrechnung ins Netz stelle, fürchte ich, schlechte (oder zumindest verbesserungsbedürftige) Beispiele zu liefern.
Ich habe beileibe keine Angst vor Kritik, würde sie sogar begrüßen. Daher werde ich Einzelaspekte auswählen und sie zur Diskussion stellen. Karolus und andere werden freundlich genug sein, mich zu korrigieren.

Mit Python zu programmieren lernt man sicher besser in der User-Umgebung beginnend mit ganz einfachen Strukturen, die nach und nach komplexer werden. Dieser Weg hat mir jedenfalls gut geholfen, und zwar immer wieder neu mit jedem neuen Problem. Für reine Python-Tests ohne OO-Beteiligung ist die Konsole im Spyder eine wunderbare Spielwiese.

Um die interne Struktur einer ods-Datei in der Form zu sehen, wie ich sie beschrieben habe, genügt es sicher, zwei oder drei einfache Dialoge in der IDE zu bauen, einfache Basic-Funktionen als Ereignisbehandlung zu definieren und dann schauen, wie das so aussieht. Und wenn man dann die Basic-Prozeduren Stück für Stück durch Python-Funktionen ersetzt, kann man den Arbeitsablauf besser nachvollziehen als mit einer fertigen Datei mit fast 3000 Zeilen Code, deren Sinnhaftigkeit man sich mühsam erschließen muss. Um die Pfaderweiterung zu testen, sollten mindestens zwei Python-Module verwendet werden, von denen eines als Library importiert wird (zum Beispiel mit der msg_box-Funktion).

Schöne Grüße
Volker

Re: [Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

von Stephan » Fr, 19.02.2016 17:15

Ich wollte das schon neulich fragen und ich tue es jetzt einmal:

gibt es das Dokument "Kostenabrechnung.ods" nicht zum Download oder übersehe ich das nur?

Ich denke schon das es gut wäre wenn man sich die im PDF beschrieben Dinge auch am Originaldokument ansehen könnte, gerade für die die es normalerweise nicht gewohnt sind den 'internen' Inhalt von ODF-Dokumenten selbst zu bearbeiten.


Gruß
Stephan

Re: [Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Fr, 19.02.2016 16:45

So, das Ganze steht jetzt auch im Wissensarchiv:
Korrektur:
http://www.oooforum.de/viewtopic.php?f=25&t=66819

Re: [Überarbeitet] Umstieg von Basic auf Python: Erfahrungsbericht

von Stephan » Mi, 17.02.2016 21:18

So, das Ganze steht jetzt auch im Wissensarchiv:
http://www.oooforum.de/viewtopic.php?f=25&t=66815

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Di, 16.02.2016 12:54

So, der Erfahrungsbericht ist nun überarbeitet und zum Download auf meiner Homepage bereitgestellt:
https://www.uni-due.de/~abi070/

Ich hoffe, er kann ein wenig hilfreich sein.

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Mo, 15.02.2016 18:04

Schade, meine Idee ist wohl eine Sackgasse gewesen. Ich muss mich damit abfinden, dass der Pythonpath in Dokumenten nicht funktioniert.

Ich melde mich, wenn ich den Erfahrungsbericht bearbeitet habe.

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Mo, 15.02.2016 14:05

Irgendwie bin ich erleichtert. Denn ich habe hier getestet wie irre und bin immer auf den Fehler gestoßen: No module named toolbox.

Es läuft wahrscheinlich darauf hinaus, dass mein Ausgangspunkt wohl zutrifft, dass der Pythonpath in Dokumenten nicht funktioniert. Ich erinnere mich auch dunkel, dass ich das vor längerer Zeit mal getestet hatte. Aber ich habe so viel getestet :?

[edit]
Karolus schreibt, dass der Import klappt, wenn die Datei noch nicht geladen ist. Ich glaube, ich habe die Lösung. Wenn schon der Pfad zu einem Unterverzeichnis nicht zu funktionieren scheint, so kann meine ursprüngliche Lösung doch noch für verschiedene Module in "Scripts/python/" klappen:

Ich habe also in "Scripts/python/" sagen wir 3 Dateien: macros01.py, macros02.py, toolbox.py

In macros01.py und macros02.py will ich toolbox importieren. In beiden Dateien steht also am Anfang:

Code: Alles auswählen

import uno
import os
import sys
doc = XSCRIPTCONTEXT.getDocument()
try:
    from toolbox import *
except:
    pythonPath = uno.fileUrlToSystemPath(doc.URL) + '/Scripts/python'
    if pythonPath not in sys.path: sys.path.append(pythonPath)
    from toolbox import *
Somit kann ich die Toolbox laden, wenn die Datei gespeichert ist, wie auch, wenn sie als neu aus einer Dokumentvorlage kommt. Ich teste das noch aus.
[/edit]

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von Karolus » Mo, 15.02.2016 12:27

Hallo

Jetzt hab ich getestet:

Code: Alles auswählen

#$(document)/Scripts/python/mytest.py

from ppp import toolbox as tb

def main():
    tb.grok()
    tb.spam()
    tb.ham()
 

Code: Alles auswählen

#$(document)/Scripts/python/ppp/toolbox.py

def grok():
    pass
def spam():
    pass
def ham():
    pass

Code: Alles auswählen

#Auszug aus der manifest.xml

<manifest:file-entry manifest:full-path="Scripts/python/ppp/toolbox.py" manifest:media-type=""/>
 <manifest:file-entry manifest:full-path="Scripts/python/ppp/" manifest:media-type="application/binary"/>
 <manifest:file-entry manifest:full-path="Scripts/python/mytest.py" manifest:media-type=""/>
 <manifest:file-entry manifest:full-path="Scripts/python/" manifest:media-type="application/binary"/>
 <manifest:file-entry manifest:full-path="Scripts/" manifest:media-type="application/binary"/> 
[edit: irgendwie hab ich die falsche manifest.xml erwischt → ist jetzt korrigiert ]
[edit2: solange man auf einer noch nicht abgespeicherten Datei arbeitet funktioniert das obere sobald man das Ding abspeichert und wieder öffnet funktioniert das nicht mehr --- schei...!!!]
Der Aufruf der Function `main` über die GUI funktioniert ohne Fehlermeldung.

Karolus

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Mo, 15.02.2016 11:57

mglw. hast du eine andere toolsbox.py weiter oben im Suchbaum von python?
Nein, in "/home/volker/.openoffice/4/user/Scripts/python/pythonpath" liegt tools.py. Die unterschiedlichen Namen waren Absicht. im AOO-installationsverzeichnis ist auch nichts.

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von Karolus » Mo, 15.02.2016 11:40

Hallo

Nein, ich hab das noch nicht getestet, es gibt auch noch andere "Baustellen" :(

mglw. hast du eine andere toolsbox.py weiter oben im Suchbaum von python?

Karolus

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Mo, 15.02.2016 11:21

vermeide den *Sternchen-import und importiere explizit den|die Funktion|en die du benötigst.

Code: Alles auswählen

from toolbox import msg_box
[ERROR] <type 'exceptions.ImportError'>: type toolbox.msg_box is unknown
Hast du das getestet?

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von Karolus » Mo, 15.02.2016 11:09

Hallo

vermeide den *Sternchen-import und importiere explizit den|die Funktion|en die du benötigst.

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von preklov » Mo, 15.02.2016 10:32

@Karolus
Ich teste gerade mit pythonpath. Ich habe den "Tools"-Code aus macros.py in die Datei toolbox.py übertragen.

Code: Alles auswählen

Scripts
   macros.py
   pythonpath
      toolbox.py
In META-INF/manifest.xml habe ich die zusätzlichen Eintragungen vorgenommen:

Code: Alles auswählen

<manifest:file-entry manifest:media-type="" manifest:full-path="Scripts/python/pythonpath/toolbox.py"/>
<manifest:file-entry manifest:media-type="application/binary" manifest:full-path="Scripts/python/pythonpath/"/>
Und in macros.py steht

Code: Alles auswählen

from toolbox import *
Beim Start einer Funktion kommt die Fehlermeldung:
[ERROR] <type 'exceptions.ImportError'>: type toolbox.* is unknown
Was läuft falsch?

Schöne Grüße
Volker

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von Stephan » Mo, 15.02.2016 06:25

Ich werde meinen Bericht korrigieren. Ich melde mich, wenn ich fertig bin.
ich warte dann noch damit das in den anderen Forumsbereich zu stellen.


Gruß
Stephan

Re: Umstieg von Basic auf Python: Erfahrungsbericht

von Stephan » Mo, 15.02.2016 06:20

Dem letzten Satz kann ich so nicht zustimmen, es ist ja nicht so das jetzt alles was sich auf die soffice-API bezieht, in python ungültig ist oder sich nicht relativ einfach "übersetzen" lässt.
Ja, stimmt da habe ich mich 'vergaloppiert' (ich meinte eigentlich nur die Sprache, aber ich schrieb ja nun einmal "in Bezug auf OO/LO"), also stimmt, Deine Kritik ist richtig.
Was in der Richtung fehlt ist ein einfaches plattformunabhänges Konzept[1] einer IDE die transparent auch noch ein wenig mehr kann als die relativ "dumme" Basic-IDE.
Das ist zutreffend, und ich würde noch etwas weiter gehen: die IDE sollte in OO/LO integriert sein (das müsste nicht 'nativ' sein, sondern könnte ja auch per Extension nachrüstbar sein), weil das Ganze sonst nicht wirklich normalanwendertauglich ist.
Die Probleme fangen schon da an wo der Anwender ein Script händisch in das Dokument packen muss, man kann den Vorgang so gut beschreiben wie man will, aus Anwendersicht erscheint dass alles nicht 'rund' wenn man es händisch machen muss.
Vergleichweise ist es heute auch bei Basic-Extensions noch so, denn dort ist eine große Zahl von Anwendern auf Tools wie BasicAddonBuilder angewiesen. Im Übrigen ist es auch für mich nervig und zeitfressend Vieles per Hand machen zu müssen.

imho:
Wenn sich Python in Praxis nicht durchsetzt dann auch, und ziemlich maßgeblich, wegen solch fehlenden Komforts bei der Programmierung, zumal viele Leute Umsteiger sind und VBA gewöhnt sind.
Das ist auch so zu beobachten wenn ich beruflich programmiere, nahezu kein Kunde will für die typischen kleinen Automatisierungen etwas Anderes als Basic, weil er dort häufig genügend Kenntnisse hat später selbst Änderungen vorzunehmen.
An Nachteile von Basic ist er hingegen von VBA gewöhnt und solange etwas in Basic geht (Einiges geht ja technisch wirklich nur in Python & co.) sind demgegenüber die Vorteile von Python nie so gravierend das es Anwender in großer Zahl überzeugt, z.B. der häufig erheblich kürzere Code, der natürlich auch leichter zu warten ist, bringt dann kaum merkliche Vorteile wenn es um typische kleine Automatisierungen geht, die häufig nur wenige hundert bis vielleicht einige tausend Codezeilen haben.
Leider wirkt in dieser Hinsicht auch jede Verbesserung bei der Ausführbarkeit von VBA in OO/LO in die quasi falsche Richtung denn es bestärkt eher am Festhalten an Basic.


Gruß
Stephan

Nach oben