Bibliotheken für Python
Beispiele für Zusatzbibliotheken
- NumPy
- Numerik
- *Pandas
- zum Verarbeiten und Auswerten tabellarischer Daten (Zweck)
- Pygame
- Spieleprogrammierung
- NLTK
- Natürliche Sprache
- Scrapy
- A Scraping and Web Crawling Framework
- scrapy.org
- Weitere
- github.com/vinta/awesome-python
Hinzufügen von Bibliotheken
Python -Version
Wenn man zum Lernen eine sehr neue experimentelle Python -Version (Alpha- oder Beta-Test-Stadium) verwendet, kann es sein, daß dafür bestimmte Bibliotheken noch nicht fertiggestellt sind. Um mit Zusatzbibliotheken arbeiten zu können, kann es sinnvoll sein, dafür eine etwas kleinere Python -Version zu verwenden (die nicht mehr im Test-Stadium ist), oder sogar eine etwas ältere Python -Version (die ungefähr ein Jahr alt ist).
Installation
Zunächst sollte die Version der vorhandenen Python -Kommandos ermittelt werden.
- Kommandos
pip --version
python --version
py --version
(»py«=»C:\Windows\py«)
Das Installationskommando sollte die passende Version haben. Man kann eine der folgenden Möglichkeiten wählen. Falls keines der drei obigen Aufrufe die richtige Version hat, ist eventuell der richtige Pfad voranzustellen.
Der Aufruf mit »python« erlaubt es möglicherweise, besser kontrollieren zu können, welche Version von Python verwendet wird, falls mehrere Versionen installiert sind.
- Kommandos
py -3.7 -m pip install --user numpy
pip install --user numpy
py -m pip install --user numpy
Die pip-Option »--user« erlaubt eine Installation, die nur für den angemeldeten Benutzer gilt. Dies ermöglicht unter Umständen erst eine Installation auf Systemen ohne Administratorenrechte.
- Kommando
pip install --User NumPy
PS:
- Anzeige der vorhandenen Versionen
py -0
- Aufruf einer bestimmten Version (beispielsweise)
py -3.7
py -3.7 -m pip install numpy
- Aufruf von Python aus
subprocess.check_call( [ sys.executable, '-m', 'pip', 'install', 'win32com'])
- Aufruf von Python aus (ungetestet)
args = [ sys.executable, '-m', 'pip', 'install', 'win32com' ]
command=__import__( 'subprocess' ).list2cmdline(args)
print( f'EXECUTING {command}' )
with __import__( 'subprocess' ).Popen \
( command,
stdout=__import__( 'subprocess' ).PIPE,
stderr=__import__( 'subprocess' ).STDOUT,
bufsize=1, universal_newlines=True) as p:for line in p.stdout:
print( end=line )
print( 'returncode = ', p.returncode )
Hinzufügen von Bibliotheken mit manuellem Herkopieren
Das manuelle Herkopieren ist nur nötig, wenn das zuvor beschriebene automatische Herkopieren nicht in Frage kommt.
- Man gibt den Namen der zu installierenden Bibliothek (eventuell zusammen mit „python“) in eine Suchmaschine ein. Normalerweise findet man die Bibliothek dann auf »pypi.python.org«, aber manchmal auch auf github. Die Größe einer Datei liegt oft zwischen 100 KByte und 30 MByte.
- Man kopierte die passende/gewünschte Version von der gefundenen Webseite. Am besten .whl, aber .gz geht auch.
- Nun gibt man dem Installationskommando den Pfad zu der herkopierten Datei an Stelle des Namens der Bibliothek.
Beispiel einer Installation mit manuellem Herkopieren
Als Beispiel zeigen wir die Installation von pyiwin32.
- Web-Suche
- pywin32 download
- Ergebnis der Web-Suche
- https://pypi.org/project/pywin32/
Am Ende der Ergebnisseite findet sich eine Auflistung verfügbarer Radversionen. Hier muß nun eine Version ausgewählt werden, die zur verwendeten Python -Version paßt!
- Ausgewähltes Rad
- pywin32-227-cp39-cp39-win_amd64.whl
Bei einem Rad ist es wichtig, daß die Versionsangabe (wie »cp39« oben) genau zur verwendeten Python-Version paßt. Das Rad »pywin32-227-cp39-cp39-win_amd64.whl« kann also nur für die Versionen „CPython 3.9.…“ verwendet werden, aber weder für „CPython 3.8.…“ noch für „CPython 3.10.…“.
Nun kann das Rad in ein lokales Radverzeichnis gespeichert werden und alsdann durch eine Aufruf der passenden pip-Version installiert werden.
- Installation des Rades
"C:\Users\name\AppData\Local\Programs\Python\Python39\Scripts\pip.exe" install "C:\Users\s\Documents\Python_wheels\pywin32-227-cp39-cp39-win_amd64.whl"
- Ausgegebene Meldungen
Processing C:\Users\s\Documents\Python_wheels\pywin32-227-cp39-cp39-win_amd64.whl
Installing collected packages: pywin32
Successfully installed pywin32-227
Could not fetch URL https://pypi.org/simple/pip/
Trotz der Fehlermeldung wurde pywin32 installiert. (Die Fehlermeldung bezieht sich nur darauf, daß pip sich nach der Installation nicht selbst aktualisieren konnte.)
Lösungen möglicher Probleme
- Oft kommt es vor, daß eine Bibliothek eine andere Bibliothek vermißt. Dann muß die andere Bibliothek zuerst installiert werden. Dies kann sich solange fortsetzen, daß man nach einer Weile Dutzende von Bibliotheken manuell installiert hat, bevor dann die Bibliothek installiert werden kann, die man eigentlich installieren wollte!
- Eine .gz-Datei kann entpackt werden und dann kann »setup.py« mit »py -3.9 setup.py install« (auf passende Version des Programmes »py« achten!) gestartet werden.
- Wenn »ez_setup.py« gestartet wird, dann muß die .gz-Datei daneben liegen (auch wenn das »ez_setup.py« in der entpackten .gz-Datei enthalten ist)
- Wenn nicht einmal »pip« verfügbar ist, können einige einfach und kleine Module „installiert“ werden, indem ihr Archiv entpackt und ihr Quelltext dann direkt verwendet wird.
»whl« – Räder
Räder (.whl) sind Archive mit fertig zusammengestellten Paketen zur Installation einer Bibliothek. Eine bestimmte Raddatei kann dabei unter Umständen nur für eine bestimmte Betriebsystem- und Prozessorversion verwendet werden.
Eier
Eier (.egg) sind ältere radähnliche Pakete und eine Art von Zip-Archiven. Das Eisystem von 2004 (setuptools) ging dem Radsystem von 2012 (PEP 427) zeitlich voran.
Einzelne Bibliotheken
»OpenSSL«
Die korrekte Bezeichnung der Bibliothek lautet: »pyOpenSSL«, daher: »pip install pyOpenSSL«.
Weitere korrekte Bezeichnungen von Bibliotheken
»colorama«.
Sammlung von Erweiterungspaketen für Windows
von Christoph Gohlke, benötigt JavaScript im Browser, Seite umfaßt zirka 3 MB
- Sammlung von Erweiterungspaketen für Windows
www.lfd.uci.edu/~gohlke/pythonlibs
Ein Installationsskript
main.py
#import sys
#sys.path.append("C:\\Users\\Pa5512H-KL\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\win32\\")
#sys.path.append("C:\\Users\\Pa5512H-KL\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\win32\\lib\\")
# 1. pywin32 installieren ("-ignore-installed" ist normalerweise nicht noetig.)
# > pip3.8 install -ignore-installed pywin32import subprocess
import sys
import os.pathif True:
args = [ sys.executable, '-m', 'pip', 'install', 0*'pypiwin32' + 1*'pywin32', '--force-reinstall' ]
command=__import__( 'subprocess' ).list2cmdline(args)
print( f'EXECUTING {command}' )
with __import__( 'subprocess' ).Popen \
( command,
stdout=__import__( 'subprocess' ).PIPE,
stderr=__import__( 'subprocess' ).STDOUT,
bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print( end=line )
print( 'returncode = ', p.returncode )
# 2. Installationsordner ermitteln (wird nicht benötigt)
# > pip3.8 show pywin32
# < Location: c:\users\pa5512h-kl\appdata\local\programs\python\python38\lib\site-packagesif False:
args = [ sys.executable, '-m', 'pip', 'show', 'pywin32' ]
command=__import__( 'subprocess' ).list2cmdline(args)
print( 'A', f'EXECUTING {command}' )
with __import__( 'subprocess' ).Popen \
( command,
stdout=__import__( 'subprocess' ).PIPE,
stderr=__import__( 'subprocess' ).STDOUT,
bufsize=1, universal_newlines=True) as p:
i = 0
for line in p.stdout:
print( 'B', i := i + 1, end=line )
# 'B' 8 'Location: c:\users\pa5512h-kl\appdata\local\programs\python\python38\lib\site-packages'
if line.startswith( 'Location: ' ):
site_packages = line.split( ': ' )[1][:-1]
print( 'P', site_packages )
print( 'C', 'returncode = ', p.returncode )# im scripts folder aufrufen (add to ram.py):
# > pywin32_postinstall.py -installif True:
args = [ sys.executable, os.path.dirname(sys.executable)+r'\Scripts\pywin32_postinstall.py', '-install' ]
command=__import__( 'subprocess' ).list2cmdline(args)
print('command=',command)
print( 'A', f'EXECUTING {command}' )
with __import__( 'subprocess' ).Popen \
( command,
stdout=__import__( 'subprocess' ).PIPE,
stderr=__import__( 'subprocess' ).STDOUT,
bufsize=1, universal_newlines=True) as p:
i = 0
for line in p.stdout:
print( 'B', i := i + 1, end=line )
print( 'C', 'returncode = ', p.returncode )print()
print( 'NOW YOU NEED TO RESTART YOUR PYTHON INTERPRETER!' )
print()# danach steht win32com.client zur Verfuegung
import win32com.client as win32
from time import sleep
excel = win32.Dispatch( "Excel.Application" )
excel.Visible = True
workbook = excel.Workbooks.Add()
worksheet = workbook.Worksheets.Add()
cell = worksheet.Cells(1)
cell.Value = 'Written using Python'
worksheet.Cells[2,2]='=A1'
worksheet.Range["D4:G4"].Value=[2,-9,16,41]
ws.Range["I1:I4"].Value=[[2],[-9],[16],[41]]
excel.DisplayAlerts = False
workbook.SaveAs( 'PythonExample20200202013337.xls' )
sleep( 1 )