Problem mit usb.core

Probleme bei der Installation?
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo liebe Forenuser,

ich bin neu unterwegs in Python aber habe mich schon schwer eingearbeitet in den letzten Tagen. Ich nutze Manjaro und als IDE VisualCode (bevorzugt) und Eric6. Ich möchte mein USB-Gerät mit Python ansteuern. Jetzt tritt folgendes Problem auf: Wenn ich im Terminal folgende Anweisungen einzeln in Python aufrufe funktioniert die Erkennung problemlos:

>>import usb.core
>>VENDOR_ID = 0x0c70
>>PRODUCT_ID = 0x074a
>>device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
>>print(device)

Sobald ich das aber als Skriptdatei ausführen möchte meldet er mir sowohl in VisualCode als auch in Eric das 'usb.core' kein Modul ist. Ich stehe gerade etwas auf der Leitung und hoffe das ihr mir helfen könnt. Wie kann ich usb.core in einer Skriptdatei nutzen ? Wie gesagt von der Konsole aus lässt es sich problemlos ausführen nur eben nicht in der IDE.

Vielen Dank im voraus
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine IDE zeigt auf einen anderen Python-Interpreter als den, den du in der Konsole aufrufst. Das sollte sich in den Projekt- oder globalen Einstellungen loesen lassen. Mit "import sys; print(sys.executable)" bekommst du raus, welchen du wo verwendest.
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo,
danke für den Tip, aber daran liegt es leider nicht. In beiden Fällen nutze ich den Interpreter in der Version 3.7.3.
Auch py-usb ist in der Version 3 über den Paketmanager installiert.
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

das Paket pyusb ist in VisualCode offensichtlich auch installiert. der aufruf von 'pip install pyusb' meldet:

Requirement already satisfied: pyusb in /usr/lib/python3.7/site-packages (1.0.2)
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich weiss nicht, wo du da was aufrufst in VS Code, aber einen Unterschied muss es machen. Was ist die Ausgabe von meinem Snippet wenn du das an den Kopf der Datei packst, die du ausfuehren willst und wo usb.core dann eben nicht existiert?
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo _deets_

jetzt bin ich etwas konfus. Als ich 'import sys; print(sys.executable)' in der Konsole und in VisualCode ausgeführt habe hat er in beiden Fällen auf
/usr/bin/python
verwiesen. Ich habe dann in VSCode mal auf die 2-er Version umgeschaltet und dann zurück auf 3.7.3 . Jetzt verweist VSCode plötzlich auf sbin/python.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung was da genau bei dir los ist, aber am Ende des Tages bleibt die Antwort halt die gleiche: das ist die Ursache fuer dein Problem. Was auch immer fuer ein Python-Interpreter verwandt wird, wenn du dein Skript ausfuehren lassen willst (und das kann ein anderer sein als in der Eingabeaufforderung in VS Code!!!!!), der ist nicht der gleiche, den du auf der Konsole/dem Terminal bekommst. So ist's einfach. Speicher dein Skript, und fuehre es von dort aus. Das muss tun. Und ggf. mal VS Code neu starten hat auch noch nicht geschadet.
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo _deets_

es liegt wohl an meiner Manjaro-Installation und das ist ein extrem konfuses Problem. Starte ich das Terminal bin ich ja in meinem Heimverzeichnis. Starte ich dort Python dann kann ich in der Konsole usb.core importieren. Das Skript habe ich aber in einem Unterordner gespeichert und wenn ich in diesen wechsele und dann python starte dann kann ich noch nicht mal von der Konsole usb.core importieren ? Das Verhalten ist absolut reproduzierbar, denn wenn ich python beende, wieder ins heimverzeichnis wechsel und python in dem Terminal starte, dann geht es wieder. Das ist die ewige Linuxhölle und ich werde es jetzt erst mal mit meinem Zweitrechner unter Kubuntu testen.
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Nachtrag:
kopiere ich das Skript ins Heimverzeichnis dann funktioniert auch das Skript. Ich werde närrisch mit der Kiste.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung was da passiert, aber das klingt *sehr* komisch. Hast du mal mit virtualenvs rumgespielt? Was sagt mein Snippet oben (ich kann das nur immer wieder betonen) wenn du in deinem Unterverzeichnis bist, wo es *nicht* geht?
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wie startest Du Python? Falls Du eine Bash als Shell verwendest, was sagt denn ``type python`` in Deinem Heimatverzeichnis und in dem Verzeichnis wo Dein Skript liegt? Statt `python` das eingeben womit Du Python startest.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

er meldet immer 'usr/bin/python' , es hat mit diesem Verweis wohl nicht zu tun. Es hängt eindeutig daran aus welchem Verzeichnis es aufgerufen wird. Lege ich das Skript im Heimverzeichnis ab, dann funktioniert es, aber sobald ich das Skript in einem Unterordner anlege spinnt die Kiste namens Manjaro komplett.
Sollte ich herausfinden was es ist dann melde ich mich nochmal. Vielen Dank für die Tipps, immerhin ist das Problem jetzt eingegrenzt und hat weder mit VSCode oder Eric zu tun. Das ist eine Einstellungsgeschichte von Manjaro, aber bevor ich da jetzt in den Verweisen rumspiele und mir die Kiste abstürzt mache ich mich mal im Manjaro-Forum kundig, denn das ist jetzt wirklich so konfus das ich keine Vorstellung habe wo ich suchen müsste.
Nochmals, Vielen Dank für die Unterstützung.
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hier mal die Ausgabe vom Test im Terminal

[XX@XX ~]$ type python
python ist /usr/bin/python
[XX@XX ~]$ cd PythonProgs/
[XX@XX PythonProgs]$ type python
python ist /usr/bin/python
[XX@XX PythonProgs]$ python eric.py
Traceback (most recent call last):
File "eric.py", line 1, in <module>
import usb.core
ModuleNotFoundError: No module named 'usb.core'; 'usb' is not a package
[XX@XX PythonProgs]$ cd ..
[XX@XX ~]$ python eric.py
DEVICE ID 0c70:074a on Bus 001 Address 008 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x110 USB 1.1
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Hm, interessant. Verwendest Du vielleicht irgendwelche Auto-Env-Skripte/Hooks die je nach Verzeichnis an den Umgebungsvariablen herum schrauben? Und bei Manjaro ist `python` ein Python 3 und kein Python 2‽

Im Heimatverzeichnis gibt es aber kein `usb`-Verzeichnis, oder?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo blackjack

selbst habe ich keine Veränderungen gemacht und ich verwende Python Version3.7.3. Mir ist schon klar das ich auf Versionsinkompatible Dinge achten muss. Es gibt im Heimatverzeichnis einen Unterordner 'USB_Programmierung', in dem ich die Dokumente und Anleitungen abgespeichert habe.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ah, gibt es in der Ordner wo Du Dein Skript liegen hast vielleicht einen Unterordner mit dem Namen `usb`?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo blackjack und _deets_

Vielen Dank für eure Tipps. Das Skript lief nicht in dem Unterordner "PhytonProgs". Nachdem ich in diesem Unterordner nochmals einen Unterordner "test_003" erstellt habe und das Skript dort neu erstellt hatte konnte ich es auch aus diesem Unterordner "test_003" sowohl in VSCode als auch Eric6 ausführen lassen. Keine Ahnung was das wirkliche Problem ist aber ich denke der Thread kann als gelöst markiert werden. Aus dem Verzeichnis "PythonProgs" funktioniert es zwar immer noch nicht, aber das soll mir egal sein. Keine Ahnung ob es Manjaro, Eric6 oder VSCode war, aber da ist wohl beim Bearbeiten irgendwas von einer dieser Anwendungen verändert worden was dazu führt das irgendwelche Verweise verbogen wurden. Egal soweit funktioniert es und das ist das Wichtigste.
Vielen Dank für eure Tipps.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@oth72: Noch mal die Frage: Gibt es in dem Unterordner wo es nicht funktioniert einen Unterordner mit dem Namen `usb`? Denn daran könnte das auch liegen. Denn wenn Du dann dort ``import usb.core`` ausführst wird in dem `usb`-Unterordner nach einer `core.py` oder einem Verzeichnis `core` mit einer `__init__.py` darin gesucht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
oth72
User
Beiträge: 13
Registriert: Dienstag 7. Mai 2019, 12:09

Hallo blackjack

nein, einen solchen Ordner gibt es nicht. Mittlerweile bin ich mit meiner USB-Dattelkiste einen Schritt weiter und kann zumindest schon mal Daten empfangen. Ich vermute das entweder Eric6 oder VSCode im Hintergrund Änderungen an den Verweisen machen und es deshalb zu Fehlern kommt. Es kann natürlich auch Manjaro selbst sein das rumzickt. Egal ich habe meinen Weg gefunden wie ich es zum Laufen bekomme. Aktuell kämpfe ich damit das einige Funktionen von usb.core zum Initialisieren sudo/root Rechte benötigen um zu laufen. Das ist imho nicht im Sinne des Erfinders.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann man ran an die udev regeln.
Antworten