2013-02-14 19 views
22

I już przez wiele pytań Pythona względem importu, ale nie mogę zrozumieć problem/zmusić go do pracy rodzeństwo ...Python moduł import z folderu

Moja struktura serwisu jest:

Driver.py 

A/ 
     Account.py 
     __init__.py 

B/ 
     Test.py 
     __init__.py 

====================

Driver.py

from B import Test 

=========

Account.py

class Account: 
def __init__(self): 
    self.money = 0 

====================

Test.py

from ..A import Account 

== ================

Kiedy próbuję uruchomić

python Driver.py

pojawia się błąd

Traceback (most recent call last):

from B import Test

File "B/Test.py", line 1, in <module> from ..A import Account

ValueError: Attempted relative import beyond toplevel package

+2

Naprawdę powinieneś wspomnieć o swojej wersji Pythona pytając o funkcje, które zmieniły się radykalnie pomiędzy wersjami (import względny, Unicode i kilka innych). Czasami ludzie będą w stanie odgadnąć na podstawie konkretnego błędu, jaki masz lub jak napisałeś swój kod, ale nie powinieneś liczyć na to, że ludzie zgadliby dobrze. – abarnert

Odpowiedz

15

Dzieje się tak dlatego, A i B są niezależne, niepowiązane, pakiety miarę Python jest zaniepokojony.

Utwórz __init__.py w tym samym katalogu co Driver.py i wszystko powinno działać zgodnie z oczekiwaniami.

+0

Dzięki! Czy możesz wyjaśnić trochę pliki __init__.py? Nie zrozumiałem wyjaśnienia znalezionego online. Pochodzę z tła C++, więc jestem przyzwyczajony do podawania ścieżek i takich – Joshua

+7

To jest trochę ręczne, ale w gruncie rzeczy: umieszczenie pliku '__init __. Py' w katalogu oznacza" w tym katalogu, wszystkie z pliki '.py' oraz wszystkie podkatalogi zawierające plik' __init __. py', są częścią tego samego pakietu ". –

+0

Wszystko, czego potrzebuje, jeśli z konta importu w pliku driver.py. Dodanie dodatkowego pliku init.py i użycie względnego importu jest nieco niezręczne i powoduje zanieczyszczenie środowiska. – Wyrmwood