[python] importError
Ciao, sono alle prime armi con python e già sorgono i primi problemi...allora...ho installato pydev su eclipse. Per fare qualche prova ho creato due package "nested" e "nested2", ognuno di essi contiene due file (oltre i file __init__) che sono example ed example2 rispettivamente. I file sono i seguenti:
su example ho creato solo un metodo chiamato fib: def fib(n): a, b = 0, 1 while b < n: print(b) a, b = b, a+b mentre in example2 voglio solo importare il metodo fib così da poterlo utilizzare. Ma se scrivo from root.nested.example import fib mi viene restituito un importError dicendomi che non riesce a trovare nessun modulo fib. La stessa prova l'ho fatta con IDLE (la shell di python) e non mi ha dato problemi....penso che sia un problema di path...ma come posso risolverlo??grazie |
All'inizio del codice metti questo:
Codice:
import sys |
ho provato ma non funziona..mi ritorna sempre lo stesso errore...
...la struttura delle cartelle è fatta così, non so se può servire: Prova (progetto) ---- src (source folder) --------root (package) ------------nested (package) example.py ------------nested2 example2.py ho provato anche ad aggiungere la cartella Prova del progetto al PYTHONPATH andando sulle opzioni di pydev ma non funziona... |
Dipende tutto dalla cartella dove si trova il file principale. Mi dici dove l'hai piazzato?
|
su Vista il progetto è posizionato in:
C:\Users\Peppe\Documents\Prova |
OK, e il file principale (mettiamo si chiami main.py) si trova in questa cartella?
|
mmm...non ho nessun file principale...l'idea era solo quella di far partire example2 in modo da richiamare il modulo fib...tra l'altro i file .py non sono classi..ho scritto solo il codice del modulo in uno e la chiamata al modulo nell'altro...
...non si può fare quello che ho fatto?? |
Dovrebbe funzionarti con
from root.nested.example import fib se example2 è messo dentro la cartella Prova, ovviamente aggiungendo prima le due righe di codice che ho inserito. Ricordati di controllare che la cartella CORRENTE del progetto dev'essere Prova, altrimenti non funziona. |
non va neanche così....boh...non so più cosa fare....
|
quello che mi restituisce è questo:
Traceback (most recent call last): File "C:\Users\Peppe\Documents\Prova\src\root\nested2\example2.py", line 9, in <module> from root.nested.example import fib ImportError: No module named root.nested.example il file example2 è il seguente: import sys sys.path.append('.') from root.nested.example import fib f = fib(10) |
Fai una cosa allora: metti tutto dentro un archivio zip e allegalo qui, così posso provarlo.
|
1 Allegato(i)
ok grazie....
|
Come immaginavo, è un problema di path dei vari oggetti.
Se metti example2.py dentro la cartella src, e da qui fai lo eseguire da python, vedrai che funzionerà. ;) |
si ok così funziona..però se volessi creare più package e richiamare moduli da altri package come faccio?...fai conto che lo stesso esempio sulla shell IDLE funziona...
|
inoltre, se dovessi creare un altro file all'interno del package nested che richiama la stessa funzione in example non funziona....
edit: mi correggo...in questo caso funziona... |
Quote:
Quindi se hai il package "pippo" che usa il modulo "pluto" del package "topolino", e tu usi "pippo", devi assicurarti che "pippo" e "topolino" siano sempre raggiungibili da Python. |
scusa ma nel mio caso non erano raggiungibili??...io nel PYTHONPATH avevo messo la source folder fino a src
|
quel che intendo è: due file che appartengono a package differenti di uno stesso progetto non possono importare moduli dell'uno o dell'altro?
|
Quote:
Quote:
|
ah ok quindi example non può richiamare un modulo di example2 se quest'ultimo richiama un modulo di example...
|
Tutti gli orari sono GMT +1. Ora sono le: 09:16. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.