2013-03-05 7 views
12

Próbuję ocenić niektóre zgłoszenia Pythona, które znajdują się w oddzielnych folderach dla każdego ucznia. Aby to zrobić, istnieje funkcja, na przykład f(), którą chcę uruchomić. Rozumiem, że jeśli moja obecna ścieżka jest taki sam jak ten, w którym się znajduje, mogę po prostu zrobićImportowanie Pythona z podfolderów

import filename 
filename.f() 

Jednak istnieją lepsze sposoby? Na przykład, powiedzmy, że struktura katalogów jest następująca:

main.py 
student/run_this.py 

wiem, że jeśli istnieje „__init__.py” plik w folderze studenta, można po prostu wpisać

import student.run_this 

jednak bez tego pliku nie działa.

Niektóre podobne pytania znalazłem były

ale żaden z nich nie dał szczególnie satysfakcjonujących odpowiedzi.

+0

Jaki jest dokładnie twój problem z plikiem '__init __. Py'? – eazar001

+1

Dodajesz folder 'student' do swojej ścieżki, a następnie importujesz' run_this'. Oto, co inne odpowiedzi każą ci zrobić, czego próbowałeś, ale nie zadziałało? –

+1

Nie chodzi o to, że nie działał tak bardzo, jak nie wydawał się elegancki. Lub przynajmniej dodanie \ __ init __. Py's wydaje mi się dość nieprzydatne - wydaje się niemoralne modyfikowanie struktury plików w celu uzyskania dostępu do podfolderów. Zmieniłem ścieżkę, przeczytałem, że była to zła praktyka, ale wydaje się rozsądnym rozwiązaniem. – vmkrish

Odpowiedz

8

utworzyć moduł __init__.py wewnątrz folderu student który powinien zawierać

from . import * 

Następnie można wywołać żadnych modułów z folderu studenta do jego modułów folderu nadrzędnego jako

import student.module.py 

Jeśli dodawać żadnych innych błędów stoisz w obliczu, możemy pomóc dalej.

+1

Czy myślisz, że możesz wyjaśnić (lub powiązać mnie z materiałem) wyjaśnienie, dlaczego \ __ init __. Py's są wymagane? To się skończyło, ale jestem nieco zdezorientowany tym, czym jest logika projektowania – vmkrish

+0

\ _ \ _ init__.py jest tak samo proste jak logika dziedziczenia klas w języku C++ lub Pythonie. Gdy pyton patrzy na folder, nie zawiera wszystkich dostępnych w nim modułów. Jeśli określisz funkcje, które mają być wykonane, gdy python wejdzie w klasę w funkcji \ _ \ _ init__, to dobrze to rozumie. tutaj po prostu importujemy niezbędne lub wszystkie moduły, gdy pyton napotka folder za pomocą \ _ \ _ init__. –

+0

Ta odpowiedź jest jedyną, którą mogłem znaleźć, aby odpowiedzieć na problem, który miałem, dzięki @MathanKumar! –