Probleme mit Import (wahrscheinlich Anfängerfehler)

  • Hallo,
    ich habe mal wieder ein Anfängerproblem schätze ich mal.
    Folgendes Problem:
    Ich verwende fürs Gewächshaus folgende Sensoren. (Xiaomi MiFlora)
    Ich habe folgende Anleitung (Link) durchgearbeitet und alles wie die in der Anleitung unter /home/pi/miflora/ installiert.

    Wenn ich jetzt unter /home/pi/miflora/ ein Skript zum Auslesen der Sensoren verwende funktioniert alles so wie es soll.

    Wenn ich jedoch das Script nach /usr/local/bin (wo alle Scripte liegen) kopiere und ausführe, kommt nur folgende Meldung:

    Python
    File "python_miflora.py", line 1, in <module>
       from miflora.miflora_poller import MiFloraPoller, \
    ImportError: No module named 'miflora'

    Ich denke mal, dass es sich hier um ein sehr bekanntes verhalten von Python handelt, jedoch habe ich scheinbar immer die falschen Suchen ausgeführt oder verstehe die Beiträge einfach nicht. :wallbash:

    Kann mir einer helfen oder zumindest eine Seite verlinken in der das Thema gut beschrieben ist?

    Vielen Dank im Voraus.

    Grüße aus der Eifel,
    Christoph

    Liebe Grüße aus der Eifel

    Christoph

    Einmal editiert, zuletzt von Christopha (14. Februar 2017 um 19:57)

  • Probleme mit Import (wahrscheinlich Anfängerfehler)? Schau mal ob du hier fündig wirst!

  • Hallo,

    Python durchsucht bei einem `import` Statement Verzeichnisse in einer bestimmten Reihenfolge und nach einem bestimmten Schema. Das ist (natürlich) auch dokumentiert: https://docs.python.org/3.4/reference/import.html.

    Wenn das zu importierende Modul nicht gefunden wird, dann gibt's einen ImportError.

    Wenn du das Skript nach /usr/local/bin legst, dann findet es das Modul `miflora` nicht, weil es "nur" im Homeverzeichnis liegt und weder in lokalen Verzeichnis noch systemweit verfügbar ist (was es aber bei korrekter Installation sein sollte, siehe Post von Manul).

    Gruß, noisefloor

  • Jepp ich denke schon, dass ich sie Installation von setup.py richtig ausgeführt habe. (hoffe aber dass sich einen Fehler gemacht habe und das der Grund für mein Problem ist)

    Die Ausgabe von

    Code
    ls -ld /usr/local/lib/python2.7/dist-packages/miflora*
    
    
    drwxr-sr-x 4 root staff 4096 Feb 14 16:31 /usr/local/lib/python2.7/dist-packages/miflora-0.1.15-py2.7.egg



    Bist Du denn sicher, daß Du den Schritt

    Code
    sudo python setup.py install

    korrekt ausgeführt hast?

    Wie ist bei Dir die Ausgabe von

    Code
    ls -ld /usr/local/lib/python2.7/dist-packages/miflora*


    ?


    Automatisch zusammengefügt:
    Hier habe ich mal den gesamten Code. Der unter /usr/local/bin liegen soll.

    Liebe Grüße aus der Eifel

    Christoph

    Einmal editiert, zuletzt von Christopha (14. Februar 2017 um 20:36)

  • Wie genau startest Du das Skript unter /usr/local/bin denn? Im von Dir geposteten Code fehlt der Shebang (erste Zeile, die mit #! beginnt). Bist Du sicher, daß das Skript von der richtigen Python-Version interpretiert wird?

    Die ls-Ausgabe sieht an sich gut aus, könntest Du sicherheitshalber noch mal die Ausgabe von

    Code
    cd /usr/local/lib/python2.7/dist-packages; ls -lAR miflora-0.1.15-py2.7.egg

    posten?

  • Christopha: Da du "print()" Zeilen für Python3 verwendest liegt es vermutlich daran das du das Module aber für python2 installiert hast.... Das sind 2 voneinander getrennte Umgebunden, da python3 nicht vollständig kompatibel mit python2 ist. Installier das Module also noch mal für python3 und dann wird auch der import klappen ;)

  • Hi, bin leider erst heute dazu gekommen die restlichen Beiträge zu lesen.
    Da ich momentan noch auf der Arbeit, bim werde ich erst heute Abend dazu kommen die Vorschläge zu testen und zu Antworten.
    Vielen Dank bisher und bis später ;)

    Liebe Grüße aus der Eifel

    Christoph


  • Ich verwende fürs Gewächshaus folgende Sensoren. (Xiaomi MiFlora)

    Interessanter Sensor: Wenn der langzeitstabil ist und für den Preis (ebay ca. 14 €) kann ich meine Basteleien einstellen...

    Wie sind denn deine Erfahrung mit dem Teil?

    (Die SW-Installation, die du hier ansprichst, sind ja ein lösbares Problem, soweit ich die Installationsausgaben verfolgt habe, ist das Modul für Python 2.7 gebaut... )

    Wie koppelst du den Sensor an, der hat ja Bluetooth... extra Adapter oder das BT vom RasPi ?

    Grüße, das Zen


  • Seit Py 2.6 gibts print auch als Funktion - ohne __future__.

    Interessant, ich war auch immer davon ausgegangen, daß die print-Funktion erst ab Python 3 dazugekommen ist. Wieder was gelernt. Unabhängig davon finde ich meigrafds Vermutung aber naheliegend, daher auch meine Frage nach genauer Art des Starts oben. Wir warten aufs Christkind (aka TE)...

    Einmal editiert, zuletzt von Manul (15. Februar 2017 um 15:57)

  • Korrektur:
    Lt Sourcen ist es für python 3.x.... habs gesehen jetzt... :(
    Automatisch zusammengefügt:


    Interessant, ich war auch immer davon ausgegangen, daß die print-Funktion erst ab Python 3 dazugekommen ist.

    Die Print-Funktion gibt es schon lange.., es wird empfohlen, diese grundsätzlich auch in P2.x zu verwenden, um eine gewisse Aufwärts-Kompatibilität zu haben (wenn man mal umstellt - Print-Befehle kommen ja öfters vor :) ).

    Ich mache das seit langem so, zumal die .format-Funktion am Print-Befehl recht komfortable und wesentlich übersichtlicher ist.... (die gehört ja zum String-Objekt ...)


  • zumal die .format-Funktion am Print-Befehl recht komfortable und wesentlich übersichtlicher ist.... (die gehört ja zum String-Objekt ...)

    Eben, und damit steht sie für beide Formen von print zur Verfügung. Was nicht gegen die Verwendung der Funktion spricht - aber auch nicht dafür.


  • meigrafd du liegst immer noch falsch. Seit Py 2.6 gibts print auch als Funktion - ohne __future__. Spätestens in 2.7 kann und meiner Meinung nach sollte man das statement durch die Funktion ersetzten. Ist also auch möglich, das Py2 genutzt wird, aber da sollte der TE selbst mal was zu schreiben ;)

    LG

    https://docs.python.org/2.6/library/functions.html#print

    Zitat


    [font="sans-serif"]Note[/font]
    [font="sans-serif"]This function is not normally available as a built-in since the name [/font][font="sans-serif"]print[/font][font="sans-serif"] is recognized as the [/font][font="sans-serif"]print[/font][font="sans-serif"] statement. To disable the statement and use the [/font][font="sans-serif"]print()[/font][font="sans-serif"] function, use this future statement at the top of your module:[/font]
    [font="sans-serif"]from __future__ import print_function[/font]


    noch Fragen?

  • >>> print("Geht.")

    Setz mal ein Komma hinter " und schau, was passiert! ``print("Geht.",)``

    Edit:
    Nur weil ihr eine Klammer hinter der print Anweisung macht, wird daraus noch lange keine Funktion. Dies ist der gleiche Irrsinn wie wenn man nach einer if Anweisung mit Klammern daher kommt. Die print Funktion wurde in PYthon3 eingeführt. Aus und Amen. Im __future__ Modul dann für vorherige Versionen zur Verfügung gestellt:
    https://docs.python.org/2/library/__fu…dule-__future__

  • Code
    Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
    [GCC 5.4.0 20160609] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print("{}".format("aaa"))
    aaa
    >>>

    Automatisch zusammengefügt:

    Mist, er war schneller :)
    Automatisch zusammengefügt:

    geht immer noch :)


  • Wie genau startest Du das Skript unter /usr/local/bin denn? Im von Dir geposteten Code fehlt der Shebang (erste Zeile, die mit #! beginnt). Bist Du sicher, daß das Skript von der richtigen Python-Version interpretiert wird?

    Die ls-Ausgabe sieht an sich gut aus, könntest Du sicherheitshalber noch mal die Ausgabe von

    Code
    cd /usr/local/lib/python2.7/dist-packages; ls -lAR miflora-0.1.15-py2.7.egg

    posten?

    Jetzt bin ich etwas verwirrt über die Diskussion die hier entfacht ist. Als erstes poste ich mal die das Ergebnis von


    Code
    cd /usr/local/lib/python2.7/dist-packages; ls -lAR miflora-0.1.15-py2.7.egg



    Vielleicht hat ja noch einer eine Idee wie ich es hinbekomme, dass ich das Script unter /usr/local/bin/ ausführen kann.

    Bin für jeden Tipp Dankbar :thumbs1:

    Merken
    Automatisch zusammengefügt:


    Christopha: Da du "print()" Zeilen für Python3 verwendest liegt es vermutlich daran das du das Module aber für python2 installiert hast.... Das sind 2 voneinander getrennte Umgebunden, da python3 nicht vollständig kompatibel mit python2 ist. Installier das Module also noch mal für python3 und dann wird auch der import klappen ;)

    Das werde ich gleich mal testen. Du meinst wahrscheinlich, dass ich die Installation nochmal, aber so ausführe:

    Hier der Link zum Script

    Then we run the setup.py

    Code
    sudo python3 setup.py install

    oder habe ich dich jetzt falsch verstanden? :huh:
    Merken
    [font="Helvetica Neue,Helvetica,sans-serif"]Merken[/font]

    Liebe Grüße aus der Eifel

    Christoph

    Einmal editiert, zuletzt von Christopha (15. Februar 2017 um 17:32)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!