Chcę zaimportować podfoldery jako moduły. Dlatego każdy podfolder zawiera plik __init__.py
. Moja struktura folderów jest następująca:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
W moim głównym skrypcie importuję
from dirFoo.foofactory import FooFactory
W tym pliku fabrycznym dołączam moduły podrzędne:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Jeśli zadzwonię do mojej fabryki, otrzymuję błąd, że Python nie może zaimportować podmodułów foo1 i foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
python
import
module
subdirectory
Razer
źródło
źródło
__init__.py
do każdego podfolderu, z którego importujesz.__init__.py
może załatwić sprawę.Foo1
znajdowała się w katalogu nadrzędnym i była zakodowana w podobny sposóbfrom Foo1 import *
. Czy jest sposób na osiągnięcie tego samego efektu, aby nie musieć poprzedzać wszystkiego prefiksemFoo1
?Wystarczy powiadomić tutaj. (od newbee, keviv22)
Nigdy i przenigdy nie nadawaj folderów lub plików symbolom takim jak „-” lub „_” dla własnego dobra. Jeśli tak zrobiłeś, możesz napotkać kilka problemów. tak jak mój, powiedzmy, chociaż twoje polecenie importu jest poprawne, nie będziesz w stanie pomyślnie zaimportować żądanych plików, które są dostępne w takich nazwanych folderach.
Nieprawidłowe nazwy folderów w następujący sposób:
prawidłowe nazwy folderów dla powyższych:
Jaki błąd popełniłem:
weź pod uwagę strukturę plików.
Co chciałem zrobić?
Jakie polecenie wydałem?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
Próbowałem wielu wyszukiwań i przeglądałem wiele pytań związanych z przepełnieniem stosu i nie mogłem zdecydować, co poszło nie tak. Wielokrotnie sprawdzałem swoje pliki, użyłem
__init__.py
pliku, wstawiłem ścieżkę środowiska i bardzo się martwiłem, co poszło nie tak ......I po długim, długim czasie odkryłem to podczas rozmowy z moim przyjacielem. Jestem trochę głupi, używając takich konwencji nazewnictwa. Nigdy nie powinienem używać spacji ani specjalnych symboli do definiowania nazwy żadnego folderu lub pliku. Więc to właśnie chciałem przekazać. Miłego dnia!
(przepraszam za ogromny post w tej sprawie ... po prostu odpuszczam moje frustracje ... :) Dzięki!)
źródło
Ustaw zmienną środowiskową PYTHONPATH. Na przykład jak ta PYTHONPATH =.: .. (dla rodziny * nix).
Możesz także ręcznie dodać swój bieżący katalog (w twoim przypadku src) do pythonpath:
źródło
Powiedz, że Twój projekt ma następującą strukturę:
Wewnątrz
run.py
możesz zaimportować skrypty pierwszy i drugi:Teraz, wciąż w środku
run.py
, będziesz mógł wywoływać ich metody za pomocą:źródło
Po prostu utwórz pusty plik ___init____.py i dodaj go w katalogu głównym, a także w całym podkatalogu / folderze aplikacji w języku Python, w którym znajdują się inne moduły Pythona.
źródło
Wystąpiły problemy, nawet gdy init .py istniał w podfolderze, a jedyne, czego brakowało, to dodanie „as” po zaimportowaniu
źródło