[Python] ImportError and sys.path

Pietro peter.zamb a gmail.com
Mar 9 Feb 2016 18:09:56 CET


Ciao,

Sto scrivendo un programma che aggiorna il sys.path e controlla che
una certa libreria sia diventata importabile.

Nella mia home (sono su linux) ho creato una cartella strutturata nel
seguente modo:

{{{
$ mkdir -p testlib/libgreen
$ touch testlib/libgreen/test0.py
$ touch testlib/libgreen/test1.py
$ mkdir -p testlib/libhydro
$ touch testlib/libhydro/test2.py
$ touch testlib/libhydro/test3.py
$ tree testlib
testlib
├── libgreen
│   ├── test0.py
│   └── test1.py
└── libhydro
    ├── test2.py
    └── test3.py

2 directories, 4 files
}}}

ora se provo ad eseguire il seguente codice da python 3 funziona e da
python 2 no... voi sapete dirmi perchè?
il codice è:

{{{
# -*- coding: utf-8 -*-
# file: test.py
import sys
sys.path.append('testlib')
import libgreen
print('Done!')
}}}

eseguendolo da shell ottengo

{{{
$ python3 test.py
Done!

$ python2 test.py
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    import libgreen
ImportError: No module named libgreen

}}}

E perchè la funzione "imp.find_module" da errore in entrambe le versioni?

codice:

{{{
# -*- coding: utf-8 -*-
# file: test_imp.py
import imp
import sys
sys.path.append('testlib')
imp.find_module('libgreen')
print('Done!')
}}}

shell:

{{{
$ python3 test_imp.py
Traceback (most recent call last):
  File "test_imp.py", line 6, in <module>
    imp.find_module('libgreen')
  File "/usr/lib/python3.5/imp.py", line 296, in find_module
    raise ImportError(_ERR_MSG.format(name), name=name)
ImportError: No module named 'libgreen'

$ python2 test_imp.py
Traceback (most recent call last):
  File "test_imp.py", line 6, in <module>
    imp.find_module('libgreen')
ImportError: No module named libgreen
}}}

cosa sto sbagliando? come posso risolvere? idee?

Buona serata.

Pietro


Maggiori informazioni sulla lista Python