Warum sind Module im PYTHONPATH nicht gefunden werden, wenn das übergeordnete Verzeichnis ist Teil der PYTHONPATH und die Datei vorhanden ist?

Habe ich folgende situation (Verifizierung durch die Befehle unten):

  • vorhandenen python-Skript-Datei in Verzeichnis x
  • vorhandenen python-cat __init__.py Datei in x
  • x Hinzugefügt PYTHONPATH variable availble für beide Benutzer eingeloggt ist, und sudo

und ich aufrufen möchte ~/test.py mit

#!/usr/bin/python
import sys;print sys.path;
import mount_utils
print "Hello World!"

mit sudo python ~/test.py die Ursachen

Traceback (most recent call last):
  File "/home/richter/test.py", line 3, in <module>
    import mount_utils
ImportError: No module named mount_utils

den Verzeichnissen, in PYTHONPATH sind nicht in sys.path außer dem aktuellen Verzeichnis. python ~/test.py wie erwartet funktioniert (druckt sys.path und Hello World! an die Konsole). sudo -E python ~/test.py schlägt mit dem gleichen Fehler. Ich verstehe nicht,

  • Warum das Modul ist nicht verfügbar, wenn PYTHONPATH variable printed in sudo echo Ausgabe
  • Warum sudo -E nicht die Umwelt zu schonen (soweit ich das verstanden habe aus man sudo und https://docs.python.org/2/using/cmdline.html es sollte kein Unterschied zwischen python bla und sudo -E python bla)

Warum erhalte ich diese Fehlermeldung?

Überprüfung der situation im detail:

$ env | grep PYTHONPATH
PYTHONPATH=:/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib
$ sudo env | grep PYTHONPATH
$ LANG=C stat /home/richter/scripts/python/lib/mount_utils.py
  File: '/home/richter/scripts/python/lib/mount_utils.py'
  Size: 8374        Blocks: 24         IO Block: 4096   regular file
Device: 80ch/2060d  Inode: 20972052    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ richter)   Gid: ( 1000/ richter)
Access: 2014-08-19 17:06:37.542787417 +0200
Modify: 2014-07-31 10:54:14.709468668 +0200
Change: 2014-07-31 10:54:14.729478917 +0200
 Birth: -
$ LANG=C stat /home/richter/scripts/python/lib/__init__.py
  File: '/home/richter/scripts/python/lib/__init__.py'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 80ch/2060d  Inode: 20972114    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ richter)   Gid: ( 1000/ richter)
Access: 2014-08-09 19:49:44.345055332 +0200
Modify: 2014-05-07 06:57:31.434851243 +0200
Change: 2014-06-25 03:17:29.569551147 +0200
 Birth: -

Habe ich nicht bekommen eine Idee von der ganz ähnlichen Frage unbeantwortet Warum PYTHONPATH ignoriert?

EDIT 1: Nach Berücksichtigung Wie legen Sie die Umgebungsvariable für alle unter meinem linux-system? und die Tatsache, dass echo ... ist ein eher schlechter Weg, um sicherzustellen, ob env-Variablen gesetzt sind, setze ich export PYTHONPATH="$PYTHONPATH:/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib" im

  • /etc/profile
  • /etc/profile.d/python_py.sh
  • /root/.bashrc
  • /home/richter/.bashrc

und jetzt PYTHONPATH ist (zusätzlich zu der oben beschriebenen situation) im env im sudo -i prompt, aber nicht in sudo env | grep PYTHONPATH. sudo python test.py immer noch nicht wegen dem gleichen Fehler, also meine Probleme bleibt.

Auch export PYTHONPATH="/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib" && sudo -E python test.py scheitert an den gleichen Fehler.

InformationsquelleAutor Karl Richter | 2014-08-19

Schreibe einen Kommentar