virtual environment

Besonders wenn man mit Windows arbeitet, lohnt es sich virtuelle Umgebungen für jedes Projekt mit Python anzulegen.

Plugins sind uneinheitlich ins Windosw OS eingebunden

Python ist aufgrund seiner vielen Bibliotheken mächtig. Doch es gibt keine standadisierte Prozedur wie die Plugins dem Betriebsystem hinzugefügt werden. Sie liegen deshalb an mehreren Orten verteilt. Dies führt dazu, dass man keinen Überblick erhält, welche Plugins installiert sind.

Was ist das Problem?

Will man ein spezifisches Python-Projekt updaten, so betrifft dieses Update ev. auch andere Projekte. Deren Schnittstelle zu anderen Programmen stimmt dann ev. nicht mehr und man weiss nicht warum.

Was macht die virtuelle Umgebung?

In jeder virtuellen Umgebung installiert man lokal in diese Umgebung die Plugins. Diese berühren so die anderen Projekte nicht.

Best Practice

  1. Python und PIP werden ins OS installiert.
  2. Für jedes neue Projekt wird ein Projektordner als virtuelle Umgebung angelegt
  3. Alle Bibliotheken und Plugins werden in diesem Projektordner installiert

 

 

Python to exe

Programm         pyinstaller      fasst python pakete zusammen zu einem executable
Installation:       git clone   https://github.com/pyinstaller/pyinstaller

Von Python zu Exe
pyinstaller  test.py                     Befehl ausführen
.                                                         Es wird automatisch ein Ordner dist/  bebildet,
.                                                         in dem das exe liegt

string

Liste zu String
list = [ „ha“, „ba“, „la“ ]
string = „“.join(list)          out: „habala “
string = “ „.join(list)          out: “ ha ba la „

2-dimensionales Array

Ziel
3 x 3 Array mit 0 initialisieren

Struktur: List of list
Liste mit 3 Elementen, die selbst Listen sind
array = [ [0, 0, 0],  [0, 0, 0], [0, 0, 0] ]

Umsetzung simple
element = [ „0“] * 3
array = element * 3

Umsetzung variabel
for i in range(3):
.              array.append( [„0“ * 3 ]

Zeilenumbruch nur für Code

return = str( var_1) + “ banana“ + str( var_2 )    \
.                 “ apricots“

return =  var_1  * 2  +  0.1 * var_2    \
+ result_a – result_b

\ auf nächsten Zeile weiterzucoden,
.  wie wenn alles in einer Zeile stünde

for

list

list = ["a", "b" ]
for i in list:              # i sind Elemente
    print i                 # output: a
                            #         b
range(2) = [ 0, 1 ]         # ist nummerierte Liste
for i in range(2):
    print i                # output        0
                                   #               1
for i in range( len(list) ):
    print list[i]          # output: a 
                                   #         b

………………………………………………………………………….
dictionary
dict = {„a“=5,
.            „b“ = 8  }
for i in dict:                     // i sind keywords
.            print i                  // output   a
.                                          //                 b
print dict(„i“)                 // output  5
.                                         //                  8

 

Datentyp

list_1 = [ 2, 7,  9]
type( list_1 )             ->    < type ‚list‘>
type(  list_1[0])       ->     < type ‚int‘ >

list_2 = [„hoi“, „ciao“ ]
type(  list_2[0])       ->     < type ’str‘ >

dict = {  „wurst“ : 5,
“ brot“    :  2   }
type( dict)                ->       <type ‚dict‘ >
type( dict[„wurst“])  ->  < type ‚int‘ >

 

Bytes einlesen

Byte-Struktur
– Formatvariablen definieren definieren Datenstruktur
– Formatvariablen stehen in einem String
– für jede Formatvariable muss eine Variable mitgegeben werden
– folgen grosse Datenpakete als, muss deren Länge
.  bekannt sein und wird vor der Stringvariable eingefügt
– “ > “ bedeutet big endian,  “ < “ littel endian

command = pack(‚ >BH‘ + str(length) + ’s ‚, typ, command, length, data)

Python_Struct_BefehlsTabelle

Vor Daten Schlüsselwörter einfügen
data = pack(‚ >BBH’+str(length)+’s ‚, testnumber, time, command, length, data)

Schlüsselwörter vor Data extrahieren
testnumber = unpack(‚>B‘, data[0:1])
time = unpack(‚>B‘, data[1:2])

Daten ohne Schlüsselwörter
data[:4]                             die ersten 4 Bytes werden weggelassen

Big Endian / Littel Endian
big endian = normal      a = (‚>B‘, 3)            output           a = 00 03
little endian                      a = (‚<B‘, 3)            output           a = 03 00

Info
In Python werden Daten als String übergeben. Sollen diese eine bestimmte Byte-Struktur haben, helfen die Funktionen pack() and unpack().
import struct *