Errore import python

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Angelo09
Prode Principiante
Messaggi: 84
Iscrizione: lunedì 2 maggio 2011, 14:42

Errore import python

Messaggio da Angelo09 »

Salve, sto creando un piccolo programma in python è ho deciso di dividere il codice in vari file.py dentro cartelle, tutto dentro una cartella madre, in stile

----------cartella1-----------mod1.py
cartella
-----------cartella2-----------mod2.py


In ogni cartella ho inserito un file vuoto __init__.py, per essere riconosciuta, adesso cerco di importare da mod2.py il mod1.py
esempio:
da mod2.py

Codice: Seleziona tutto

from cartella.cartella1 import mod1
oppure from cartella.cartella1.mod1 as mod 
Mi da errore ImportModule, in cosa sbaglio
Gerry Ghetto

Re: Errore import python

Messaggio da Gerry Ghetto »

Perché non posti l'errore?
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Errore import python

Messaggio da vaeVictis »

Posta anche la struttura della directory che ottieni da bash (comando find, per esempio).
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Angelo09
Prode Principiante
Messaggi: 84
Iscrizione: lunedì 2 maggio 2011, 14:42

Re: Errore import python

Messaggio da Angelo09 »

Errore:

Codice: Seleziona tutto

Traceback (most recent call last):
  File "guiping.py", line 12, in <module>
    from startwv.wv import prcping
ImportError: No module named startwv.wv
find:

Codice: Seleziona tutto

.
./__init__.py
./main.py
./wv
./wv/__init__.py
./wv/prcping.py
./main.pyc
./wvgui
./wvgui/__init__.py
./wvgui/gui.py
./wvgui/guiping.py
./wvgui/log.pyc
./wvgui/__init__.pyc
./wvgui/log.py
./wvgui/info.py
./wvgui/guiping.pyc
./wvdial.log
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Errore import python

Messaggio da crap0101 »

dipende da come esegui il programma e se il tuo package è in una directory conosciuta da python.
Un esempio (credo) esplicativo:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ mkdir -p progetto/{foo,bar}
crap0101@orange:/tmp/FOO$ touch progetto/{foo,bar}/__init__.py
crap0101@orange:/tmp/FOO$ touch progetto/__init__.py
crap0101@orange:/tmp/FOO$ echo 'def x():print "baz.x!"' > progetto/foo/baz.py
crap0101@orange:/tmp/FOO$ echo 'from progetto.foo import baz' > progetto/bar/imprel.py
crap0101@orange:/tmp/FOO$ echo -e 'from bar import imprel\nimprel.baz.x()\n' > progetto/main.py
crap0101@orange:/tmp/FOO$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from progetto import main
baz.x!
>>> 
crap0101@orange:/tmp/FOO$ python progetto/main.py
Traceback (most recent call last):
  File "progetto/main.py", line 1, in <module>
    from bar import imprel
  File "/tmp/FOO/progetto/bar/imprel.py", line 1, in <module>
    from progetto.foo import baz
ImportError: No module named progetto.foo
crap0101@orange:/tmp/FOO$ PYTHONPATH=/tmp/FOO python progetto/main.py
baz.x!
crap0101@orange:/tmp/FOO$ cd progetto/
crap0101@orange:/tmp/FOO/progetto$ python main.py
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from bar import imprel
  File "/tmp/FOO/progetto/bar/imprel.py", line 1, in <module>
    from progetto.foo import baz
ImportError: No module named progetto.foo
crap0101@orange:/tmp/FOO/progetto$ PYTHONPATH=/tmp/FOO python main.py
baz.x!
crap0101@orange:/tmp/FOO/progetto$ 
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Angelo09
Prode Principiante
Messaggi: 84
Iscrizione: lunedì 2 maggio 2011, 14:42

Re: Errore import python

Messaggio da Angelo09 »

crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4772570#p4772570][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:dipende da come esegui il programma e se il tuo package è in una directory conosciuta da python.
Un esempio (credo) esplicativo:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ mkdir -p progetto/{foo,bar}
crap0101@orange:/tmp/FOO$ touch progetto/{foo,bar}/__init__.py
crap0101@orange:/tmp/FOO$ touch progetto/__init__.py
crap0101@orange:/tmp/FOO$ echo 'def x():print "baz.x!"' > progetto/foo/baz.py
crap0101@orange:/tmp/FOO$ echo 'from progetto.foo import baz' > progetto/bar/imprel.py
crap0101@orange:/tmp/FOO$ echo -e 'from bar import imprel\nimprel.baz.x()\n' > progetto/main.py
crap0101@orange:/tmp/FOO$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from progetto import main
baz.x!
>>> 
crap0101@orange:/tmp/FOO$ python progetto/main.py
Traceback (most recent call last):
  File "progetto/main.py", line 1, in <module>
    from bar import imprel
  File "/tmp/FOO/progetto/bar/imprel.py", line 1, in <module>
    from progetto.foo import baz
ImportError: No module named progetto.foo
crap0101@orange:/tmp/FOO$ PYTHONPATH=/tmp/FOO python progetto/main.py
baz.x!
crap0101@orange:/tmp/FOO$ cd progetto/
crap0101@orange:/tmp/FOO/progetto$ python main.py
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from bar import imprel
  File "/tmp/FOO/progetto/bar/imprel.py", line 1, in <module>
    from progetto.foo import baz
ImportError: No module named progetto.foo
crap0101@orange:/tmp/FOO/progetto$ PYTHONPATH=/tmp/FOO python main.py
baz.x!
crap0101@orange:/tmp/FOO/progetto$ 

Codice: Seleziona tutto

PYTHONPATH=/tmp/FOO python progetto/main.py
Quindi bisogna indicare con PYTHONPATH la cartella principale
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Errore import python

Messaggio da crap0101 »

Angelo09 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4772657#p4772657][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:[...]

Codice: Seleziona tutto

PYTHONPATH=/tmp/FOO python progetto/main.py
Quindi bisogna indicare con PYTHONPATH la cartella principale
In linea generale i package e i moduli devono essere in qualche posto di cui python è a conoscenza... quelli di default sono la directory corrente da cui stai eseguendo lo script e quelli che puoi vedere stampando sys.path, per qualsiasi altra posizione devi indicare esplicitamente dove trovare i moduli/package. Questa è una situazione che può appunto verificarsi quando hai il tuo programma con una più o meno grande gerarchia di dir che per qualche motivo (ad esempio perchè lo stai sviluppando in una tua cartella personale) non si trova nei path di cui sopra e devi quindi dare all'interprete un "aiutino"; lo puoi fare in vari modi, modificando PYTHONPATH in modo temporaneo o permanente, modificando sys.path a runtime, o ancora importando esplicitamente i moduli/package con altri accrocchi che qui tralascio.

https://docs.python.org/2/using/cmdline ... PYTHONPATH
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti