Wissen Python-Projekte - Die Onleihe
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
wissen Python-Projekte Anleitungen • Grundlagen • Hintergründe c Python-Projekte l.de Intelligent ecia .ctsp Bilder skalieren mit künstlicher Intelligenz www Eigenen Telegram-Bot programmieren Objekte erkennen mit Lego Mindstorms Kreativ Text-Adventure selbst entwickeln Lasershow-Animationen erzeugen Elektronische Musik komponieren Nützlich Twitter und Reddit steuern Doodle-Clone mit Django Texte verschlagworten Clever coden Von Anfänger bis Profi: So erleichtern Sie Ihren Alltag mit Python
bauen, um auszuprobieren, wie die Programmier- wenn ein Angreifer das Salz kennt, müsste er einen sprache reagiert. Bei einer Exception gibt Python hohen Aufwand treiben, um aus dem Passwort standardmäßig ein Traceback aus. Darin steht ganz einer Domain das Masterpasswort zu berechnen. unten die Stelle, an der der Fehler wirklich aufgetre- Auf einem i5 mit 3ˇGHz dauert die Berechnung ten ist. Darüber stehen alle Aufrufe, die an diesem eines einzelnen Passworts gerade mal 0,04ˇs. Für Code beteiligt waren. Werden einer Funktion Para- das Knacken eines 10 Zeichen langen Masterpass- meter des falschen Typs übergeben, tritt der Fehler worts hingegen bräuchte der chinesische Super- zwar innerhalb der Funktion auf. Die Fehlerquelle computer Tianhe-2 mit einer Brute-Force-Attacke liegt aber in dem Aufruf, den das Traceback direkt schätzungsweise 5000 Jahre. Ist das Masterpass- darüber anzeigt. Vertauschen Sie mal beim Aufruf wort nur halb so lang, wäre er wahrscheinlich in von convert_bytes_to_password die Parame- weniger als einer Minute fertig. Denken Sie sich ter und führen Sie das Programm aus, um die Fol- also ein Masterpasswort mit ausreichend vielen gen zu beobachten. Zeichen aus. Der Typ einer Exception sagt viel darüber aus, wo Für die meisten Domains wird die Standardein- der Fehler liegen könnte. „SyntaxError“ deutet auf stellung eines 10 Zeichen langen Passworts mit einen falsch formatierten Quelltext hin oder auf Sonderzeichen ausreichen. Mit demselben Master- einen Tippfehler. Wenn Sie beispielsweise ein passwort erzeugt die vorgestellte Version c’t while in wile ändern, zeigt Python Ihnen sofort, in SESAM auf allen Rechnern dieselben Passwörter welcher Zeile der Fehler steht. Bei einem „TypeEr- zu den gleichen Domains. Wenn Sie bei gleichem ror“ wurde vermutlich eine Variable mit dem fal- Domainnamen und Masterpasswort trotzdem an- schen Datentyp übergeben. Diesen Fehler produ- dere Passwörter erzeugen wollen, ändern Sie das zieren Sie beispielsweise, wenn Sie die Parameter Salz auf einen anderen Wert. Auf diese Weise er- von convert_bytes_to_password vertauschen. zeugen Sie Ihr ganz persönliches SESAM. Wenn Sie Die Meldung „TypeError: 'int' object is not iterable“ Ihr SESAM auf verschiedenen Geräten einsetzen teilt Ihnen mit, dass int.from_bytes() einen Da- wollen, müssen Sie auf allen Geräten das gleiche tentyp erwartet, der wie eine Liste aus einzelnen Salz einstellen, damit dieselben Passwörter ent- Elementen besteht. Im Traceback steht, in welcher stehen. Reihenfolge Sie die Parameter an die Funktion über- Für die Domain sollten Sie sich eine Methode geben haben. „IndexError“ deutet darauf hin, dass überlegen, wie Sie von der URL auf die Domain das Programm eine größere Liste erwartet hat. Schrei- kommen. Ob Sie „www.paypal.com“, „paypal.com“ ben Sie mal password_characters[85] hinter die oder lieber nur „paypal“ bei der Domain eintragen, Definition von password_characters und führen hängt von Ihrer Vorliebe ab. Der Passwort-Manager das Programm aus, um diesen Fehler zu provozieren. generiert für jede Variante unterschiedliche Pass- Sollten Sie auf unerwartete oder unverständli- wörter. che Fehler stoßen, hilft das Internet weiter. Wenn Manche Websites akzeptieren keine Sonderzei- Sie den Text einer Fehlermeldung in eine Suchma- chen oder begrenzen die Länge des Passworts. In schine eingeben, fördert das in vielen Fällen Bei- diesem Fall können Sie das Programm kurzzeitig träge von Programmierern zutage, die das gleiche abändern und die Sonderzeichen aus den pass- Problem hatten und deren Fragen schon beantwor- word_characters ausklammern oder die Länge in tet wurden. Suchen Sie dabei nach dem allgemei- der letzten Zeile anpassen. Sollten Sie für eine Do- nen Typ des Fehlers, lassen Sie aber Eigenheiten main ein neues Passwort brauchen, können Sie die des eigenen Programms wie den Traceback und Va- Iterationszahl im Aufruf von pbkdf2_hmac um 1 er- riablen- oder Funktionsnamen weg. Beginnt eine höhen. Da alle vorherigen Passwörter mit den Zeile mit einem #, interpretiert Python sie als Kom- alten Einstellungen erzeugt wurden, sollten Sie mentar und führt sie nicht aus. Damit können Sie das Programm nach diesem Sonderfall wieder auf sich Notizen im Quelltext machen oder schnell mal die alten Einstellungen zurückändern. Außerdem eine Zeile deaktivieren. sollten Sie sich notieren, welche Passwörter mit anderen Einstellungen erzeugt wurden, damit Sie c’t SESAM benutzen immer das passende Passwort erzeugen. Da die Quelltext, iPython- Einstellungen einem Angreifer nur wenig nützen, Notebook: c’t SESAM ist kein reines Anfängerbeispiel: Das Pro- können Sie Ihre Notizen auf einem Zettel notieren www.ct.de/wfrv gramm generiert sehr sichere Passwörter. Selbst oder bei einem Cloud-Dienst ablegen. (pmk) c 16 Python als Alltagshelfer c’t wissen Python-Projekte (2018)
Python-FAQ Von Pina Merkert Python 2 oder 3 ihrem Windows-Installer auch alle Abhängigkeiten für den wissenschaftlichen Einsatz von Python unter. ˙ken habe ich aber gehört, dass sie nur mit Py- Python 3 ist moderner, von einigen Bibliothe- thon 2 laufen. Sollte man mit Version 2.7 oder 3.x Paketverwaltung wählen entwickeln? ˙ger des Systems installieren oder über pip? Sollte man Bibliotheken über den Paket-Mana- ß Die Frage stellt sich durchaus, da Python 3 nicht vollständig abwärtskompatibel zu Python 2 ist. Da aber alle wichtigen Bibliotheken und Frame- works mittlerweile mit Python 3 laufen, können Sie ßkete Der Python-Paketmanager installiert Pa- pip aus dem Python Package Index (PyPi) und nicht aus den Paketquellen des Systems. Die Paket- im Normalfall getrost auf die neuere Version set- manager der Linux-Distributionen und Homebrew zen. Ein weiteres Argument für den Nachfolger ist, auf dem Mac erwarten aber die Versionen der Python- dass einige Programme wie Blender kein Python 2 Pakete aus ihren eigenen Quellen, die oft etwas mehr unterstützen. älter sind. Darüber hinaus berücksichtigen die Pip- Über Imports aus dem future-Modul können Sie Pakete keine automatischen Sicherheitsaktualisie- Programme schreiben, die mit beiden Versionen der rungen. Sprache laufen. Dann empfiehlt es sich, mit Python Da Python-Programme zu vielen Linux-Systemen 3 zu entwickeln und hin und wieder mit Python 2 zu gehören, riskieren Sie Probleme, wenn Sie deren prüfen, ob der Code mit dem alten Interpreter noch Abhängigkeiten an der Paketverwaltung vorbei mit korrekt läuft. Die beiden Versionen lassen sich auf pip aktualisieren. Hier sollten Sie immer die Ver- allen Betriebssystemen parallel installieren. sion verwenden, die das Linux installiert. Werden die Abhängigkeiten nur von Ihren selbst entwickel- Python unter Windows ten Programmen benutzt, entschärft sich die Pro- blematik. Aber auch hier erspart es Probleme, wenn ˙liefert. Welche Python-Distribution sollte man Windows wird ohne Python-Interpreter ausge- Sie mit apt & Co. statt pip installieren. Sollte das Betriebssystem ein von Ihnen benötigtes Paket installieren? nicht bereitstellen, kommen Sie an pip allerdings ß Normalerweise genügt das offizielle Installa– tionspaket von python.org. Falls Sie jedoch in C implementierte Bibliotheken wie Numpy benöti- nicht vorbei. Dann sollten Sie aber auch ein Virtua- lenv installieren. gen, wird die Installation unter Windows etwas Virtuelle Umgebung komplizierter. Zwar bringt auch Python für Windows ˙Virtual Environment (Virtualenv) erstellen? den Paketmanager pip mit. Der muss für die Instal- Sollte man zum Entwickeln grundsätzlich ein lation von Numpy aber denselben C-Compiler an- werfen, mit dem auch Python kompiliert wurde. Mi- crosoft bietet ein für Python 2.7 passendes Paket an, für Python 3.6 müssten Sie aber Visual C++ 14 in- ßEin Virtualenv ist eine abgeschottete Arbeits- umgebung, in der pipbeliebige Python-Pakete installieren kann, ohne außerhalb laufende Python- stallieren (siehe ct.de/wh6z). Programme zu stören. Python 2 erstellt die Umge- Python-Distributionen wie Anaconda bringen bung mit dem Programm virtualenv; Python 3 ver- gleich das komplette Paket aus Python-Interpreter wendet das Modul venv: und vorkompilierten Bibliotheken wie Numpy oder Scipy mit. Die freie Python-IDE Spyder bringt in python 3 -m venv env 18 Python als Alltagshelfer c’t wissen Python-Projekte (2018)
Ob ein Virtualenv Daraufhin liegt eine Kopie des Python-Interpreters aktiviert ist, erkennen samt pip im Verzeichnis env/. Sie können dem Ver- Sie an dessen Namen zeichnis einen beliebigen Namen geben, „env“ ist in Klammern am aber Standard und damit beispielsweise in GitHubs Anfang des Prompts. .gitignore für Python enthalten. Die geschaffene Umgebung aktiviert unter Linux und Mac OS der Befehl source env/bin/activate Unter Windows macht das folgendes Script: env\Scripts\activate Wenn Sie danach Pakete mit pip installieren, landen diese nur innerhalb des Virtualenv. Ihr Programm verwendet sie aber genau wie systemweit instal- lierte Bibliotheken. Das verhindert Versionskonflikte, wenn unterschiedliche Programmierprojekte auf un- terschiedliche Versionen der gleichen Bibliothen zu- greifen. Sie verlassen das Virtualenv mit deactivate ˙tualenv? Wie aktualisiert man alle Pakete in einem Vir- ßVirtualenvs kommen beispielsweise bei Django- Projekten auf Webservern und damit auch in Produktivsystemen vor. An dieser Stelle vermisst man automatische Systemupdates. Leider bietet pip keine Funktion, um alle PyPi-Pakete auf dem neuesten Stand zu halten. Mit etwas Shell- Magie aktualisiert pip aber trotzdem alle Pakete im Virtualenv: pip install --upgrade pip pip freeze --local | grep -v '\-e' | : .cut -d = -f 1 | : .xargs -n1 pip install -U Da die zwei Befehle alle Python-Pakete auf die ak- Python-Compiler für tuelle Version aktualisieren, eignen sie sich auch, Windows um bei längeren Programmierprojekten mit der Zeit www.ct.de/wh6z zu gehen und immer mit aktuellen Versionen zu testen. (pmk) c c’t wissen Python-Projekte (2018) Python als Alltagshelfer 19
c’t SESAM objekt– orientiert erweitern Für den Python-Crashkurs haben wir einen Passwort-Manager namens c’t SESAM programmiert. An einer erweiterten Version lernen Sie jetzt Grundsätze objektorientierter Programmierung, den Import eigener Module, Lesen und Schreiben von Dateien, Verschlüsselung mit AES und einen Hauch Fehlerbehandlung. Von Pina Merkert U nser Crashkurs-Beispiel c’t SESAM berechnet ken und auch Passwörter sicher speichern, die sie in nur 22 Zeilen Python-Code aus einem Mas- nicht aus dem Masterpasswort berechnen kann. terpasswort und einer Domain sichere Pass- Zusätzlich war es uns wichtig, alle Passwörter – wörter (siehe Seite 6). Für den Alltagseinsatz ist es auch das Masterpasswort – ändern zu können. allerdings niemandem zuzumuten, die Einstellun- Damit das geht, darf c’t SESAM die Passwörter nicht gen für jede Domain im Kopf zu behalten. Die erwei- mehr direkt aus dem Masterpasswort berechnen, terte Version soll sich deshalb Einstellungen mer- da sie sich sonst alle mit jedem neuen Masterpass- 20 Python als Alltagshelfer c’t wissen Python-Projekte (2018)
Sie können auch lesen