Import skryptu z katalogu nadrzędnego
Jak zaimportować moduł (plik Pythona), który znajduje się w katalogu nadrzędnym?
Oba katalogi mają plik __init__.py
, ale nadal nie mogę zaimportować pliku z katalogu nadrzędnego?
W tym układzie folderów skrypt B próbuje zaimportować skrypt a:
Folder A:
__init__.py
Script A:
Folder B:
__init__.py
Script B(attempting to import Script A)
Następujący kod w skrypcie B nie działa:
import ../scriptA.py # I get a compile error saying the "." is invalid
3 answers
Nie importujesz skryptów w Pythonie importujesz Moduły. Niektóre moduły Pythona są również skryptami, które można uruchamiać bezpośrednio (wykonują one pewną użyteczną pracę na poziomie modułów).
[6]} ogólnie rzecz biorąc, lepiej jest stosować przywóz bezwzględny niż przywóz względny.toplevel_package/
├── __init__.py
├── moduleA.py
└── subpackage
├── __init__.py
└── moduleB.py
W moduleB
:
from toplevel_package import moduleA
Jeśli chcesz uruchomić moduleB.py
jako skrypt, upewnij się, że Katalog nadrzędny toplevel_package
znajduje się w twoim sys.path
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-21 08:04:11
Z docs :
from .. import scriptA
Można to zrobić w pakietach, ale nie w skryptach uruchamianych bezpośrednio. Z linku powyżej:
Zauważ, że zarówno jawny, jak i Niejawny import względny opiera się na nazwa bieżącego modułu. Ponieważ nazwa głównego modułu to zawsze"__ main__", moduły przeznaczone do użycia jako główny moduł a Aplikacja Pythona powinna zawsze używać importu bezwzględnego.
Jeśli stworzysz skrypt importujący A. B. b, nie odbieramy ValueError.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-21 07:09:31
Jeśli chcesz uruchomić skrypt bezpośrednio, możesz:
- Dodaj ścieżkę FolderA do zmiennej środowiskowej (
PYTHONPATH
). - Dodaj ścieżkę do
sys.path
w skrypcie.
Wtedy:
import module_you_wanted
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-28 21:44:28