Импорт модулей из родительской папки - PullRequest
489 голосов
/ 03 апреля 2009

Я использую Python 2.5.

Это мое дерево папок:

ptdraft/
  nib.py
  simulations/
    life/
      life.py

(у меня также есть __init__.py в каждой папке, здесь опущено для удобства чтения)

Как импортировать модуль nib из модуля life? Я надеюсь, что можно обойтись без возни с sys.path.

Примечание. Основной модуль, который запускается, находится в папке ptdraft.

Ответы [ 17 ]

7 голосов
/ 06 сентября 2016

import sys sys.path.append('../')

6 голосов
/ 28 июля 2018

Вышеупомянутые решения тоже подойдут. Другое решение этой проблемы -

Если вы хотите импортировать что-либо из каталога верхнего уровня. Тогда,

from ...module_name import *

Также, если вы хотите импортировать какой-либо модуль из родительского каталога. Тогда,

from ..module_name import *

Также, если вы хотите импортировать какой-либо модуль из родительского каталога. Тогда,

from ...module_name.another_module import *

Таким образом, вы можете импортировать любой конкретный метод, если хотите.

6 голосов
/ 31 марта 2016

Если вы не находитесь в пакетной среде с файлами __init__.py, библиотека pathlib (входит в состав> = Python 3.4) делает очень кратким и интуитивно понятным добавление пути родительского каталога к PYTHONPATH:

import sys
from pathlib import Path
sys.path.append(str(Path('.').absolute().parent))
4 голосов
/ 16 октября 2013

тот же стиль, что и в прошлом ответе, но в меньшем количестве строк: P

import os,sys
parentdir = os.path.dirname(__file__)
sys.path.insert(0,parentdir)

файл возвращает местоположение, в котором вы работаете

1 голос
/ 30 апреля 2019

Я обнаружил, что следующий способ работает для импорта пакета из родительского каталога скрипта. В этом примере я хотел бы импортировать функции в env.py из пакета app.db.

.
└── my_application
    └── alembic
        └── env.py
    └── app
        ├── __init__.py
        └── db
import os
import sys
currentdir = os.path.dirname(os.path.realpath(__file__))
parentdir = os.path.dirname(currentdir)
sys.path.append(parentdir)
1 голос
/ 24 сентября 2015

Работа с библиотеками. Создайте библиотеку с именем nib, установите ее с помощью setup.py, пусть она будет находиться в пакетах сайтов, и ваши проблемы решены. Вам не нужно собирать все, что вы делаете в одной упаковке. Разбейте его на куски.

0 голосов
/ 25 октября 2017

В системе Linux вы можете создать программную ссылку из папки «life» на файл nib.py. Затем вы можете просто импортировать его как:

import nib
...