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
Author: Right leg, 2012-01-21

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.

 56
Author: jfs,
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.

 27
Author: Rob Wouters,
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:

  1. Dodaj ścieżkę FolderA do zmiennej środowiskowej (PYTHONPATH).
  2. Dodaj ścieżkę do sys.path w skrypcie.

Wtedy:

import module_you_wanted
 4
Author: phay,
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