Relative Importanweisungen und pip

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Ich habe nach einer Pause wieder mit Python angefangen. Als ich ein neues PyCharm-Projekt anfing und mehrere ModuleNotFoundError hatte, stellte ich fest das ich über das Intallieren von Paketen etc. nur wenig weiß. Obwohl ich eine Menge gelesen habe, habe ich das Problem leider immer noch.
Ich schreibe einfach mal auf was ich verstanden habe. So erspare ich euch ne Menge Geschreibsel.

Ich habe einen import:

Code: Alles auswählen

from paketname.modulname import Klassenname
Habe ich das richtig verstanden:
paketname.modulname ist anscheinend eine relative Importanweisung. Der Pfad des Paketes ist relativ zur Programmdatei, oder anders: Im Ordner von der Programmdatei ist ein Ordner mit dem Namen paketname, dort befindet sich eine Datei modulname.py mit Klassenname.

In diesen Pfad habe ich besagtes Paket kopiert. Dann wurden mir aber weitere ModuleNotFoundError angezeigt, da mein Modul weitere Abhängigkeiten besitzt. Ich habe dann fleissig Pakete kopiert, aber das scheinen sehr viele Abhängigkeiten zu sein...

Ich habe dann an anderer Stelle gelesen, dass pip auch gleich abhängige Pakete runterlädt. Muss ich dazu einfach in sys.path meinen Projektpfad hinterlegen, pip starten und notwendige Pakete laden?
Benutzeravatar
Dennis89
User
Beiträge: 1560
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

PyCharm erstellt für jedes Projekt eine Entwicklungsumgebung und über "Settings" ->"Project" -> "Interpreter" -> "+" kannst du die benötigten Pakete installieren. Erst wenn es dort das benötigte Paket nicht gibt, würde ich mir über Alternativen Gedanken machen. Ob das Kopieren eine Alternative ist, weis ich nicht, habe da aber etwas Zweifel.

Um welches Paket geht es denn genau?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Vielen vielen Dank für deine Antwort. Ich weiss das ich die Antwort eigentlich kennen müsste, wie auch immer....

Es handelte sich um das Paket
binance

dann fehlte mir
regex

Jetzt will er dateutil. Das Paket will er aber nicht installieren, weil:
ERROR: Could not find a version that satisfies the requirement dateutil (from versions: none)
ERROR: No matching distribution found for dateutil
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

NWA hat geschrieben: Sonntag 11. Dezember 2022, 13:22 Habe ich das richtig verstanden:
paketname.modulname ist anscheinend eine relative Importanweisung. Der Pfad des Paketes ist relativ zur Programmdatei, oder anders: Im Ordner von der Programmdatei ist ein Ordner mit dem Namen paketname, dort befindet sich eine Datei modulname.py mit Klassenname.
Das muss kein relativer Pfad sein. Befindet sich paketname nicht im Ordner der Programmdatei wird im (normalen) Python PATH gesucht, also in den installierten Python Modulen.
OS: LMDE5 *** Homepage *** Github Seite
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NWA: Das ist ein absoluter Import. In Python 3 muss man relative Importe *explizit* relativ machen, das ist nicht mehr so das implizit erst einmal im gleichen Verzeichnis wie beim importierenden Modul geschaut wird, wie das in Python 2 noch (ohne ``from __future__ import absolute_import``) der Fall war.

Man installiert keine Packages oder Module in dem man einfach irgendwo etwas hin kopiert. Das kann in einigen Fällen funktionieren, in vielen aber auch nicht. Packages oder Module installiert man mit ``pip`` oder anderen, externen Werkzeugen, aber ``pip`` ist erst einmal der Standardweg. Es kann sein, dass es bei einigen Packages vorteilhaft ist vorher etwas anderes zu installieren. Typischer Fall wäre ``wheels``. Das *muss* man nicht haben, aber ohne werden halt keine Wheels-Pakete installiert falls es die für ein Package gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Dennis89
User
Beiträge: 1560
Registriert: Freitag 11. Dezember 2020, 15:13

Wenn du in den Einstellungen unter "Project" -> "Python Interpreter" bist, was steht dann in dem DropDown-Menü hinter "Python Interpreter:"?

Bei mir, mit Python 3.9, funktioniert die Installation von 'binance' problemlos.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Mein Interpreter ist 3.10

Die Beschreibung das normalerweise alles über pip installiert wird, ist vielleicht eine kleine aber für mich superwichtige info.

Ich hatte das oben schon beschrieben: Binance konnte ich normal installieren. Jetzt hänge ich an dateutil fest...
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Dann gib doch mal ein bisschen Futter zu der Aussage.
Was versuchst du? Wie lautet die Fehlermeldung?
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Das mache ich doch gerne.

Binance_Endpoint.py

Code: Alles auswählen

import sys

from binance.client import Client
Wenn ich das ausführe, dann erhalte ich folgende Fehlermeldung:

C:\Users\Asus\BINANCE_PYTHON\3_Python-Programme\2022-03-16_Trading\venv\Scripts\python.exe C:\Users\Asus\BINANCE_PYTHON\3_Python-Programme\2022-03-16_Trading\Binance_Endpoint.py
Traceback (most recent call last):
File "C:\Users\Asus\BINANCE_PYTHON\3_Python-Programme\2022-03-16_Trading\Binance_Endpoint.py", line 4, in <module>
from binance.client import Client # Client-Objekt wird an BinanceSocketManager übergeben
File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\binance\client.py", line 8, in <module>
from .helpers import date_to_milliseconds, interval_to_milliseconds
File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\binance\helpers.py", line 3, in <module>
import dateparser
File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\dateparser\__init__.py", line 3, in <module>
from .date import DateDataParser
File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\dateparser\date.py", line 7, in <module>
from dateutil.relativedelta import relativedelta
ModuleNotFoundError: No module named 'dateutil'


Wenn ich dann dateutil über pip installieren möchte, dann kommt folgende Fehlermeldung:

ERROR: Could not find a version that satisfies the requirement dateutil (from versions: none)
ERROR: No matching distribution found for dateutil


Das scheint zu bedeuten, dass die gefundene dateuil nicht dem Gesuchten entspricht. Was noch auffällt ist, dass pip bei dateutil keinerlei Beschreibung oder Version angibt.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Dazu kann pip dir auch nichts sagen, denn es gibt im Index kein Paket mit dem Namen "dateutil".

Welches der "binance" Pakete hast du denn installiert? Und wie?
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Paket heisst so ähnlich. Der Package Index hat eine Suchfunktion!
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Unter pip habe ich durchaus dateutil gefunden. Anbei der screenshot:

Bild

Ich habe das binance-Paket in Version 0.3 installiert. Das mit dem "wie installiert?" ist ein wenig komplizierter. Als ich mit Python anfing, hatte ich recht durcheinander installiert und es lief irgendwie. Das mit dem "wie" wollte ich dann später klären...
Das binance-Paket hatte ich mit Anaconda (und andere) installiert. Mit dem Fehler hatte ich dann viel gelesen und Pakete hin- und herkopiert.
Aus irgendeinem Grund habe ich die Pakete nicht hinbekommen und jetzt bin ich hier.

Die Suchfunktion habe ich, dank euch, heute zu nutzen gelernt.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Wie gesagt, pyPi kennt kein dateutil.
Mir wäre auch neu, dass installierte Module direkt in lib liegen und nicht in site-packages. Es sei denn pycharm macht da etwas anders. Aber das kann ich mir nicht denken.

Vielleicht solltest du einmal auf der grünen Wiese starten.

Wenn das binance Paket seine eigenen Abhängigkeiten nicht vernünftig mit installiert, würde ich das nicht nutzen. Das "binance 0.3" Paket von PyPi ist seit 2018 nicht aktualisiert und die Homepage gibt es nicht mehr. Da würde ich eher auf dei Suche nach Alternativen gehen.
Benutzeravatar
grubenfox
User
Beiträge: 612
Registriert: Freitag 2. Dezember 2022, 15:49

was aktuelles ist möglicherweise:
python-binance v1.0.16
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

HAT SICH ERLEDIGT: War natürlich mein Fehler.
Ich hatte eigentlich immer das Paket python-binance benutzt. In dem Chaos damals hatte ich das nicht mehr so auf dem Schirm. Auf meinem Rechner sah ich immer nur den Ordner binance, und dachte das wäre der Ordner UND DER PAKETNAME.
Ich bin dann doch Hinweis nachgegangen python-binance zu installieren, und jetzt sehen die Fehlermeldungen schon vieeeel "besser" aus...

Vielen Dank für eure Hilfe! Ich habe mehr gelernt, als nur einen einfachen Fehler zu korrigieren.



Wie sieht denn so eine "grüne Wiese" aus?

Soll ich alle Programme und Pakete löschen und neu aufsetzen? Aus Lehrgründen wäre das eigentlich garnicht so schlecht...

Meinem Bild nach wurde dateutil doch in pip gefunden. Woher hast du die Erkenntnis, dass es das Paket nicht geben soll?
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NWA: So eine grüne Wiese ist ein leeres virtualenv, wo ausser dem Python und der Standardbibliothek nichts drin ist. Das sollte PyCharm aber normalerweise für jedes Projekt machen.

Deinem Bild nach wird das in der IDE angezeigt. Das pip das *nicht* findet ist dort auch zu sehen, denn das steht ja recht deutlich rechts oben beim „command output“. Sparrow hat ja einen Link zum Suchergebnis auf PyPI im Beitrag wo das *nicht* in den Suchergebnissen vorkommt. Dort kommt aber python-dateutil vor, und das dürfte das gesuchte sein. Allerdings würde ich erwarten, dass das korrekt als Abhängigkeit angegeben sein sollte, so dass man das eigentlich nicht manuell noch nachinstallieren muss, wenn man das ursprüngliche Package installiert hat welches diese Abhängigkeit benötigt. Also wirklich installiert und nicht Verzeichnisse kopiert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten