To pip or not to pip, that's the question !

Probleme bei der Installation?
Antworten
RIN67630
User
Beiträge: 141
Registriert: Sonntag 29. April 2018, 08:07

Hallo,

ich habe mit mehreren aktuelle Systeme Probleme Python mit Imports zum Laufen zu bekommen:
Win11
macOS Sonoma
Ubuntu 22.04

Auf alle drei Systeme ist eine Arduino-IDE installiert, die Python und esptools.py zum Uploaden von binaries benutzt.
alles funktioniert soweit.

Erstes Thema: Jetzt will ich aber mit Python3 esptools.py standalone ausführen.
bei Win
11: kein Problem
bei Unixoide kommt:

Code: Alles auswählen

Pyserial is not installed for /usr/local/opt/python@3.12/bin/python3.12. Check the README for installation instructions.
Traceback (most recent call last):
  File "/Users/mifi/Desktop/esptool.py", line 27, in <module>
    import serial
ModuleNotFoundError: No module named 'serial'
Dann habe ich beim Mac folgendes probiert:

Code: Alles auswählen

pip install Serial
zsh: command not found: pip
~% brew install pip
==> Auto-updating Homebrew...
...
Warning: No available formula with the name "pip". Did you mean pipx, pit, pig, pcp, php, pop, pup, sip, vip or zip?
[u]pip is part of the python formula
~% brew install python
Warning: python@3.12 3.12.4 is already installed and up-to-date.
[/u]:
Wat nu?

Zweites Thema: ich möchte folges Programm ausführen:

Code: Alles auswählen

import geocoder
ip = geocoder.ip("me")
print(ip.city)
print(ip.latlng)
Fehlermeldung
ModuleNotFoundError: No module named 'geocoder'

Bei Win

Code: Alles auswählen

pip install Geocoder 
läuft ohne Fehlermeldung durch, jedoch das Modul wird weiterhin nicht gefunden.

Bei Unixiode
pip geht ja nicht s.o.

Code: Alles auswählen

pipx install Geocoder 
läuft ohne Fehlermeldung durch, jedoch das Modul wird weiterhin nicht gefunden.

Wie bringt man eine korrekte Installtion von Python+pip heute durch?
Es gibt hunderten von Tutorials, die aber anscheinend meistens überholt sind.
Wo gibt es eine, die heute funktionniert?

Danks schonmals...
Laszlo
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

Code: Alles auswählen

python -m pip install ...
hat hier immer funktioniert. Ich mache das aber immer nur im Terminal, ohne irgend so eine IDE. Man muss darauf achten welches Python bzw. pip man erwischt: das das System-eigene Python / pip oder ein anderes lokal installiertes Python / pip.
Mal

Code: Alles auswählen

python -m pip -V
und

Code: Alles auswählen

pip -V
ausprobieren und vergleichen.
RIN67630
User
Beiträge: 141
Registriert: Sonntag 29. April 2018, 08:07

grubenfox hat geschrieben: Montag 8. Juli 2024, 10:00

Code: Alles auswählen

python -m pip install ...
hat hier immer funktioniert. Ich mache das aber immer nur im Terminal, ohne irgend so eine IDE. Man muss darauf achten welches Python bzw. pip man erwischt: das das System-eigene Python / pip oder ein anderes lokal installiertes Python / pip.
Mal

Code: Alles auswählen

python -m pip -V
und

Code: Alles auswählen

pip -V
ausprobieren und vergleichen.

Code: Alles auswählen

python -m pip install Geocoder
zsh: command not found: python
~
 % python3 -m pip install Geocoder
error: externally-managed-environment

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a Python library that isn't in Homebrew,
    use a virtual environment:
    
    python3 -m venv path/to/venv
    source path/to/venv/bin/activate
    python3 -m pip install xyz
    
    If you wish to install a Python application that isn't in Homebrew,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. You can install pipx with
    
    brew install pipx
    
    You may restore the old behavior of pip by passing
    the '--break-system-packages' flag to pip, or by adding
    'break-system-packages = true' to your pip.conf file. The latter
    will permanently disable this error.
    
    If you disable this error, we STRONGLY recommend that you additionally
    pass the '--user' flag to pip, or set 'user = true' in your pip.conf
    file. Failure to do this can result in a broken Homebrew installation.
    
    Read more about this behavior here: <https://peps.python.org/pep-0668/>

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
das wird immer abstruser...
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

Was sagt

Code: Alles auswählen

python3 -m pip -V 
?
Den Fehler hatte ich letztens in einem Test-Verzeichnis in dem ich mal etwas ausprobieren wollte auch.. hatte ich nicht weiter verfolgt, Test-Verzeichniss ist inzwischen gelöscht.
RIN67630
User
Beiträge: 141
Registriert: Sonntag 29. April 2018, 08:07

grubenfox hat geschrieben: Montag 8. Juli 2024, 11:29Was sagt

Code: Alles auswählen

python3 -m pip -V 

Code: Alles auswählen

python3 -m pip -V
pip 24.0 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)
Benutzeravatar
__blackjack__
User
Beiträge: 13997
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@RIN67630: Die Meldung ist doch recht umfassend. Das Python da ist von Homebrew verwaltet und Du solltest da nicht mit pip an der Paketverwaltung von Homebrew vorbei was installieren was dann am Ende diese Python-Installation kaputt machen kann. Entweder sagst Du mit der entsprechenden Option das Dir das egal ist, oder Du legst für Deine Projekte ein venv an.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
RIN67630
User
Beiträge: 141
Registriert: Sonntag 29. April 2018, 08:07

__blackjack__ hat geschrieben: Montag 8. Juli 2024, 12:49 @RIN67630: Die Meldung ist doch recht umfassend. Das Python da ist von Homebrew verwaltet...
auf Homebrew als Ursache muss man erst kommen...
OK, dann heraus damit !
Ich habe Python3 von Homebrew unistalliert.

Dann bleibt jetzt noch das Python3 aus macOS, der jetzt allerdings kein pip ausführt. Pip sollte aber schon Teil vom standard-macOS sein.
Wenn ich jetzt –wie woanders gelesen- "python3 -m ensurepip" eingebe, heißt es, dass pip bereits installiert ist.
???

Jetzt habe ich es: es muß pip3 heißen !
Ich konnte dann "pip3 import geocoder" ausführen.
Lief ohne Fehlermeldung durch.

Aber die Story ist noch nicht zu Ende !
Ich versuche weiterhin mein Geocoder Progrämmchen (aus Thonny) auszuführen.
Da kommt immer noch:

Code: Alles auswählen

Traceback (most recent call last):
  File "~/Desktop/Geocoding.py", line 2, in <module>
    import geocoder
ModuleNotFoundError: No module named 'geocoder'
Dann hatte ich ein Verdacht: ich habe es mal aus dem Terminal probiert:

Code: Alles auswählen

 % python3 Geocoding.py        
~/Library/Python/3.9/lib/python/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
Essen
[51.4566, 7.0123]
So ging es, wenn auch mit Fehlermeldungen.

Warum zermasselt mir Thonny es?

Eigentlich wollte ich mit Python eine Installation für Noobs vereinfachen, aber wenn ich jetzt sehe, was da alles schief gehen kann, und was man alles flicken muss, bin ich mir nicht mehr sicher, ob ich das so empfehlen will.

Gibt es einen Ausweg?
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

Ich kenne Thonny jetzt nicht wirklich, es legt vermutlich für seine Projekte ordentlich ein venv an in das man dann Module wie `geocoder` installieren kann damit man sich nicht sein Python3 aus MacOS durch Installation solcher Pakete potentiell kaputt macht.
Benutzeravatar
__blackjack__
User
Beiträge: 13997
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@RIN67630: Mit dem pip3 vom Systempython einfach was systemweit installieren würde ich nicht als „flicken“ bezeichnen. Eher das Gegenteil. Die Lösung wäre nicht das Homebrew-Python zu deinstallieren gewesen, sondern einfach mal lesen was da stand und das befolgen. Wobei man auch direkt durchs lesen auf Homebrew gekommen wäre. Denn das steht da ja, dass das Python von Homebrew verwaltet wird und man Pakete mit brew installieren soll, und falls das nicht geht, ein venv anlegen. Eben damit man nichts kaputt macht.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1217
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ignoriere uns einfach und nutze den Optionsschalter.

Das Problem ist über die Zeit gewachsen und deswegen ist es durch PIP nun standardmäßig unterbunden worden, da die Distributoren viele Supportanfragen bezüglich Python und kaputten Abhängigkeiten hatten. In den meisten Fällen lag es daran, dass der Nutzer via PIP irgendein Paket installiert hat.

Bei Debian 12 werden folgende Pfade/Dateien nach Modulen durchsucht:
/usr/lib/python311.zip
/usr/lib/python3.11
/usr/lib/python3.11/lib-dynload
/usr/local/lib/python3.11/dist-packages
/usr/lib/python3/dist-packages
Wenn ich dann noch ein Modul als User installiere (wird auch unterbunden), kommt noch das Lokale Verzeichnis dazu:
/home/public/.local/lib/python3.11/site-packages
Wenn man ein Modul via pip systemweit installiert hat, landete das Modul/Paket in
/usr/lib/python3/site-packages
Module und Pakete, die über den Paketmanager der Distribution installiert werden, landen in
/usr/local/lib/python3.11/dist-packages
.

Unter MacOS ist es sehr ähnlich.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
RIN67630
User
Beiträge: 141
Registriert: Sonntag 29. April 2018, 08:07

__blackjack__ hat geschrieben: Montag 8. Juli 2024, 15:25 @RIN67630: Mit dem pip3 vom Systempython einfach was systemweit installieren würde ich nicht als „flicken“ bezeichnen. Eher das Gegenteil. Die Lösung wäre nicht das Homebrew-Python zu deinstallieren gewesen, sondern einfach mal lesen was da stand und das befolgen. Wobei man auch direkt durchs lesen auf Homebrew gekommen wäre. Denn das steht da ja, dass das Python von Homebrew verwaltet wird und man Pakete mit brew installieren soll, und falls das nicht geht, ein venv anlegen. Eben damit man nichts kaputt macht.
Ich verstehe die Begründung für gekapselten Environments.
Nur kann ich einem Noob-User, der nur mein Installer nutzen will, nicht erzwingen, sich damit auseinander zu setzen.
Homebrew-Python hatte ich lange vorher installiert, das soll niemand machen müssen, schon gar nicht Homebrew nutzen müssen, ein venv anlegen oder Docker zu installieren.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1217
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Auch für sowas gibt es Lösungen:
Es gibt noch eine weitere Lösung, die hier viele sicherlich nicht gerne hören.
Nutze eine statische Sprache wie z.B. C/C++ oder Rust. Ich glaube, bei macOS wird die Sprache Swift verwendet.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

DeaD_EyE hat geschrieben: Montag 8. Juli 2024, 16:39
Wobei ich gerade in der Pynsist-Doku den Satz entdeckt habe, den ich schon lange suche:
You can use Pynsist to build Windows installers from a Linux or Mac system.
Sehr interessant! Müsste ich mal bei Gelegenheit ausprobieren....
Benutzeravatar
__blackjack__
User
Beiträge: 13997
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@RIN67630: Was hat denn Docker damit zu tun? Das ist ja eine ganz andere und viel aufwändigere Baustelle.

Vielleicht haben ja Benutzer bereits Python per Homebrew installiert. Oder benutzen ein Linux-System. Die bekommen auch alle diese Meldung. Und falls man sich Python aus dem Microsoft-Store installiert hat, oder Anaconda installiert hat, könnte es auch sein, dass nicht einfach pip benutzt werden kann oder sollte. Der Trend geht ziemlich klar zum venv.

@DeaD_EyE: Der Vorschlag C++ zu verwenden wurde ja bereits gemacht und abgelehnt. Bedeutet für den OP das pro Zielplattform ein Kompilat erstellt werden muss. Ist natürlich wirklich nicht so schön. Ausserdem wird Python ja sowieso schon gebraucht für das Werkzeug zum flashen des Mikrokontrollers.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Irgendetwas zu installieren, ist ziemlich umständlich. Als Nutzer möchte man eine Webseite öffnen und einen Knopf drücken, und das wars: https://espressif.github.io/esptool-js/
bin-Dateien patchen geht natürlich mit Javascript auch.
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@RIN67630: Ich denke, du machst ein paar Fehler in deinen Annahmen.

Erstens gehst du davon aus, dass deine Anwender nichts von ihrem System wissen - und leitest daraus direkt ab, sie zu bevormunden indem du irgendwelche Eingriffe in das System vornimmst. Das ist nun mehr als unüblich und die Werkzeuge das zu separieren existieren.
Wenn du das ordentlich machen willst, dann musst du Installer oder ähnliches verwenden, dass dafür sorgt, dass alles was man zur Ausführung braucht, erhält. Wenn du dem Benutzer nicht zumuten möchtest, sich mit Dingen, wie einem venv auseinanderzusetzen, dann musst _du_ das für den Benutzer tun. _Du_ musst also eine Möglichkeit, wie zum Beispiel einen Installer, zusammenklöppeln, der auf dem Zielsystem für die entsprechende Umgebung sorgt.

Dazu ist Verständnis nötig, wie venv und pip funktionieren. Und du musst dich mit Möglichkeiten beschäftigen, das zum Anwender zu bringen.
Oder du musst dich von der Vorstellunge trennen, dass alle Anwender Noobs sind, die ihr System nicht kennen.
Antworten