2016-05-15 18 views
8

Sono un principiante con Python. Prima di iniziare, ecco la mia Python struttura di cartellePython - Modulo non trovato

-project 
----src 
------model 
--------order.py 
------hello-world.py 

Sotto src ho una cartella denominata model che ha un file di Python chiamato order.py quali contenuti seguono:

class SellOrder(object): 
    def __init__(self,genericName,brandName): 
     self.genericName = genericName 
     self.brandName = brandName 

Successivo mia hello-world.py è all'interno della cartella src , un livello superiore a order.py:

import model.order.SellOrder 

order = SellOrder("Test","Test") 

print order.brandName 

Ogni volta che eseguire python hello-world.py si genera l'errore

Traceback (most recent call last): 
    File "hello-world.py", line 1, in <module> 
    import model.order.SellOrder 
ImportError: No module named model.order.SellOrder 

C'è qualcosa che ho perso?

+0

quale dovrebbe essere il contenuto se __init__.py? – user962206

+0

https://docs.python.org/2/tutorial/modules.html#packages –

+0

'__init __. Py' può essere vuoto o contenere codice. è comune che i progetti espongano le loro classi principali/pubbliche a livello di pacchetto. Nel tuo caso potresti aggiungere 'da model.order import SellOrder' in modo che un altro codice possa fare' dal progetto import Sellorder' invece che da project.model.order import SellOrder'. – miraculixx

risposta

4

Tutti i moduli in Python devono avere una certa struttura di directory. You can find details here.

Creare un file vuoto chiamato __init__.py sotto la directory model, in modo tale che la struttura delle directory apparirebbe qualcosa di simile:

. 
└── project 
    └── src 
     ├── hello-world.py 
     └── model 
      ├── __init__.py 
      └── order.pyc 

anche nel file hello-world.py modificare l'istruzione import al seguente:

from model.order import SellOrder 

Che dovrebbe risolverlo :)

PS : Se si sta posizionando la propria directory model in un'altra posizione (non nello stesso ramo di directory), sarà necessario modificare il percorso python utilizzando sys.path.

+3

inoltre è considerato una buona pratica non avere una directory 'src'. ha senso anche perché se importi il ​​tuo codice da qualche altra parte dovresti essere in grado di importare project.model e non project.src.model. – miraculixx

+1

@miraculixx assolutamente! – RafazZ

0

è necessario un file denominato __init__.py (due caratteri di sottolineatura su ciascun lato) in ogni cartella nella gerarchia, quindi uno in src/ e uno in model/. Questo è ciò che Python cerca per sapere che dovrebbe accedere a una particolare cartella. I file hanno lo scopo di contenere le istruzioni di inizializzazione, ma anche se li si crea vuoti, questo lo risolverà.

Problemi correlati