2012-07-12 10 views
7

Przeszukałem tę stronę od początku do końca, ale nie znalazłem ani jednego sposobu, aby faktycznie osiągnąć to, co chcę w Python3x. Jest to prosta aplikacja zabawkowa, więc pomyślałem, że mógłbym napisać kilka prostych przypadków testowych w dowodach i nazwać to dniem. Generuje raporty i dlatego chciałbym się upewnić, że mój kod nie zrobi niczego chwiejnego po wprowadzeniu zmian.Importowanie katalogu nadrzędnego dla krótkich testów

Moja obecna struktura katalogów jest: (tylko odpowiednie części włączone)

project 
    -model 
    __init__.py 
    my_file.py 
    -test 
     my_file_test.py 

Mam piekło czasu coraz my_file_test.py importować my_file.py.

Tak jak powiedziałem. Przeszukałem tę witrynę od początku do końca i żadne rozwiązanie nie zadziałało. Moja wersja jest Python 3.2.3 działa na Fedorze 17.

Wcześniej próbowali prób: https://stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3 Importing modules from parent folder Can anyone explain python's relative imports? How to accomplish relative import in python

W praktycznie każdej próbie pojawia się błąd na efekt:

ImportError: Brak modułu o nazwie * LUB ValueError: Próba względnego importu w pakietach

Co się tutaj dzieje. Próbowałem każdej zaakceptowanej odpowiedzi na SO, a także na wszystkich interwebs. Nie robiąc niczego, co by tu pasowało, ale jako programista .NET/Java/Ruby, okazuje się to absolutną definicją intuicyjności.

EDIT: Jeśli to ma znaczenie Próbowałem ładuje klasę, że próbuję zaimportować w REPL i uzyskać następujące:

>>> import datafileclass 
>>> datafileclass.methods 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
>>> x = datafileclass('sample_data/sample_input.csv') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'module' object is not callable 

Jeśli to ma znaczenie ... Wiem funkcjonalność w pracach klasowych ale nie mogę go zaimportować, co w tej chwili powoduje niemożność przetestowania. W przyszłości z pewnością spowoduje problemy z integracją. (nazwy zostały zmienione, aby chronić niewinnych). uzyskanie w ciągu kilku tygodni pożądanej funkcjonalności dla tej iteracji biblioteki ... każda pomoc może być przydatna. Zrobiłby to w Ruby, ale klient chce Python jako doświadczenie uczenia się,

Odpowiedz

6

Struktura kodu tak:

project 
    -model 
    __init__.py 
    my_file.py 
    -tests 
    __init__.py 
    test_my_file.py 

Co ważne, nasz katalog tests powinny być również katalog modułu (mają pustą __init__.py plik w nim).

Następnie w pliku test_my_file.py użyj from model import my_file, a z głównego katalogu uruchom python -m tests.test_my_file. To wywołuje test_my_file jako moduł, co powoduje, że Python ustawia swoją ścieżkę importu, aby uwzględnić twój najwyższy poziom.

Jeszcze lepiej, możesz użyć pytest lub nos, a uruchomienie py.test podejmie testy automatycznie.

Zdaję sobie sprawę, że to nie odpowiada na twoje pytanie, ale będzie ci łatwiej pracować ze standardowymi praktykami Pythona, niż przeciw nim. Oznacza to strukturę projektu z testami w swoim własnym katalogu najwyższego poziomu.

+0

Dzięki. Spróbuję tego wieczoru.To było podobne do mojej pierwotnej struktury, ale natknąłem się na pewne zasoby, które stwierdzały, że powinienem je tak ukształtować. Dam ci znać, jak to działa, gdy jestem bez pracy. – Rig

+1

Powoduje to błąd "ImportError: Brak modułu o nazwie modelu" w wierszu 1 (instrukcja importu). Co jest z tym obrazem. – Rig

+0

Czy są jakieś wyraźne adnotacje, których potrzebuję w mojej klasie, aby można je było importować? Nie bardzo zorientowany w Pythonie i od jakiegoś czasu, odkąd go nawet użyłem (który był wtedy tylko nauczycielem). – Rig

Powiązane problemy