Eine der größten Veränderungen mit dem Release von Abaqus 2024 besteht im Python Scripting Interface, welches ein Upgrade auf Python 3 erfahren hat. Bisherige Versionen von Abaqus verwendeten Python 2. Im Allgemeinen ist Python 3 sicherer und einfacher in der Anwendung, allerdings nicht abwärts kompatibel. Daher sind Skripte, die mit Python 2 geschrieben wurden auf Grund von Syntaxänderungen erst einmal nicht lauffähig unter Python 3.

In diesem Beitrag betrachten wir ein paar Unterschiede zwischen Python 2 und 3 und schauen uns das 2t3-tool an, mit dem Skripte geupdatet werden können.

Printing

In Python 2 ist der print-Befehl ein Statement:
print „Spam“
In Python 3 ist der print-Befehl eine Funktion:
print(„Spam“)

Aus diesem Grund ist die Python 2 Syntax nicht kompatibel mit Python 3. Die Python 3 Syntax kann in Python 2 bereits verwendet werden, wenn der Befehl „from __future__ import print_function“ an den Beginn des Skripts gestellt wird. Dies ist ein möglicher Workaround, um unter Python 2 schon den Print-Befehl von Python 3 verwenden zu können. Auf diese Weise kann ein schrittweises Upgrade der Skripte erfolgen.

Division

In Python 2 gibt die Division zwischen zwei Integern einen Integer zurück. Unter Python 2 ist das Ergebnis der folgenden Berechnung also:
>>> 5 / 2
2

In den meisten Anwendungen ist dies nicht das Ergebnis, das man erwarten würde. Um stattdessen das erwartete Ergebnis von 2.5 zu erhalten, muss in Python 2 mindestens einer der beiden Zahlen durch einen Float ersetzt werden.
In Python 3 hingegen ist Float-Division auch dann als default hinterlegt, wenn beide Zahlen integer sind. Die Integer-Division muss explizit via // angegeben werden.

Beachten Sie, dass dies nicht nur Skripte in Abaqus beeinflusst, sondern jeden Bereich von Abaqus, der Python Syntax verwendet (unvollständige Liste):

• Ausdrücke im Keyword *PARAMETER
• Expression fields in Abaqus/CAE
• Ausdrücke in Environment-Dateien (z.B. abaqus_v6.env) – insbesondere wenn diese maßgeschneiderte Funktionen wie onCaeStartup( ) verwenden.

Das heißt, insbesondere Funktionen, in denen „/“ explizit zur Integer-Division eingesetzt wurde, ändern mit der Anpassung ihr Verhalten. Da das Übersetzungstool 2to3 die Intention des Programmierers schlecht vorhersehen kann, werden solche Fälle auch nicht transformiert.
Um auch unter Python 2 Float-Division als default zu setzen, kann der Befehl „from __future__ import division“ an den Anfang des Scripts gesetzt werden. Dies kann bei der Überprüfung, ob aus Versehen Integer Division verwendet wurde, helfen.

Strings

Wir unterscheiden zwischen zwei verschiedenen Arten von Strings:

Text strings enthalten Text, der von Menschen gelesen werden kann.
Byte strings, sind Abfolgen von bytes, d.h. Integern zwischen 0 und 255. Diese bilden eine lower-level Representation von Text und werden typischerweise beim Datenaustausch verwendet.

Python 2 unterscheidet nicht fundamental zwischen Text Strings and Byte Strings; beide werden in der str Klasse gespeichert, wobei bei Text Strings das Encoding unspezifiziert bleibt. In Python 3 wird fundamental zwischen beiden String Arten unterschieden. Text wird in der str Klasse gespeichert, wohingegen Byte Strings als bytearray gespeichert werden.

Das bedeutet, dass, insbesondere wenn Daten als Text gespeichert und weitergegeben werden sollten, hier Vorsicht geboten ist, je nach Codierung des Textes. Um Fehler bei der Umwandlung von Skripten zu reduzieren können in Python 2 Strings mit einem b versehen werden:

byteString = b’Eggs‘

Dies beeinflusst die Funktionsweise des Skripts nicht, dient aber dem Übersetzungsskript als Hinweis, dass dieser String als bytestring angelegt wird. Strings ohne b voran werden in der str Klasse gespeichert.

Iterating over dicts

Wenn wir in Python 2 über eine nicht-geordnete Menge iterieren (Dictionaries oder Repositories), dann geben die Funktionen keys, values und items jeweils eine Liste zurück. Der Inhalt dieser Liste wird nicht geupdated, wenn die ursprüngliche Menge geändert wird.
Python 3 führt eine neue Art von Objekten namens View ein, welche durch die obigen Funktionen statt einer Liste zurückgegeben werden. Der Hauptunterschied zu Python 2 ist, dass dieser View direkt mit der ursprünglichen Menge verlinkt ist. Ändert sich diese, so ändert sich auch der View. Es liegt also keine Kopie der keys, values oder items der ursprünglichen Menge vor. Bei Veränderungen der Menge in der Schleife könnte es somit zu Runtime Errors kommen, wenn sich die Größe der Menge durch die Iterationen verändert. Möchte man hingegen das Verhalten von Python 2 behalten, d.h. über eine Momentaufnahme der Menge iterieren, muss man die View auf die Menge in eine Liste packen, was genau so von dem Tool 2to3 gemacht wird.

Importe

Importe verhalten sich ebenfalls unterschiedlich in den beiden Python Releases. Der Hauptunterschied besteht im Reloading, was notwendig ist, wenn sich ein Modul ändert, welches bereits importiert wurde. Wenn wir beispielsweise ein Modul als Plugin in Abaqus/CAE importiert haben und es verändern, so muss es mithilfe von reload neu geladen werden damit die Veränderung auch in Kraft tritt (oder wir starten Abaqus/CAE neu). Diese Funktionalität ist unterschiedlich in den beiden Python Versionen.

In Python 2 kann das Modul myModule mithilfe von reload(myModule) neu geladen werden werden. In Python 3 ist die Funktion reload nicht länger Teil der builtin Funktionen und muss selbst aus dem importlib Modul importiert werden. In Python 3 benötigt man also die folgenden zwei Zeilen:

from importlib import reload
reload(myModule)

Dies wird von dem Tool 2to3 zur Python-3 Kompatibilität konvertiert.

Verwendung des Konversationsskripts

Die Pythoneigene Konversationsbibliothek lib2to3 ist bereits in Abaqus 2023 integriert. Eine erweiterte Version, abqPy2to3, ist in Abaqus 2024 enthalten. Zur Verwendung kann entweder das „Upgrade Scripts“ Tool in Abaqus/CAE verwendet werden (Plug-ins > Abaqus > Upgrade Scripts), oder in der Kommandozeile der folgende Befehl verwendet werden:

abaqus python -m abqPy2to3 C:my_script_folder

Dieser Befehl konvertiert alle Skripte im angegebenen Ordner sowie in allen Unterordnern.

Aus Sicherheitsgründen sollten alle Skripte zuvor getestet werden!

Weitere Infos unter 3DEXPERIENCE 3DSwym

Zusammenfassung

Auch wenn durch Python 3 die Verwendung des Scripting Interface leichter und sicherer wird, so ist in der aktuellen Übergangsphase Vorsicht geboten. Einige Plug-ins könnten zunächst nicht lauffähig sein und selbstgeschriebene Skripte müssen ggf. überarbeitet werden. Das 2to3 Tool kann hierbei nach einer Vorbereitung der Skripte bei der Transformation helfen. Dennoch sollte immer mithilfe von Tests sichergestellt werden, dass die Skripte nach der Transformation weiterhin die erwarteten Ergebnisse liefern.

Download Abaqus 2024

Vorherige
Hybrid Cloud PLM senkt Gesamtbetriebskosten (Total Cost of Ownership)
Weiter
Ermüdungsanalyse: Was ist fe-safe?
Kurzberatung

Buchen Sie noch heute einen Termin und gehen Sie mit einem PLM-Experten direkt ins Gespräch.

  • Kostenlose Beratung von Experten
  • Zeitliche Flexibilität: Passen Sie die Beratung an Ihren Zeitplan an
  • Keine lästigen Anfahrtswege – bequem von Ihrem Ort der Wahl
Bleiben Sie mit dem TECHNIA Newsletter up to date und erhalten Sie regelmäßige Informationen zu:
  • Aktuellen Produkten und Dienstleistungen
  • Die neuesten Software Updates
  • Kommende Aktionen
  • Aktuelle Webinare & Events

Jetzt anmelden

Webinare und Webinare on Demand

Tauchen Sie ein in die Welt der IT! In unseren aktuellen und aufgezeichneten Webseminaren (WoD) lernen Sie von erfahrenen Beratern mehr über PLM und CAD.

  • Kompetentes Wissen zu aktuellen IT-Themen von erfahrenen Beratern
  • Einfaches Erlernen von Anwendungen und Software Produkten
  • Verständlich und fachmännisch erklärt