2015-12-14 3 views
1

Я использую Python 3.4модуль импорт в Python3

У меня есть структура каталогов, которая выглядит следующим образом:

A 
    B 
     c.py 
     d.py 
     __init__.py 
    C 
     e.py 
     f.py 
     __init__.py 
    g.py 
    __init__.py 

От g.py я могу импортировать вещи как из B и модулей C.

мне нужно, в e.py, импортировать что-то из c.py

Я пробовал:

import B 

и

from B.c import stuff_I_need 

Для обоих я получаю ошибка:

"No module named B". 

Я также пытался что-то вроде:

from A.B.c import stuff_I_need 

Я дополнительно смущает тот факт, с одинаковой структурой каталогов, я могу сделать импорт мне нужно с Python 2.7.

Помогите мне выяснить, что происходит?

Решение:

PACKAGE_PARENT = '..' 
SCRIPT_DIR = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.expanduser(__file__)))) 
sys.path.append(os.path.normpath(os.path.join(SCRIPT_DIR, PACKAGE_PARENT))) 

Взятые из here.

ответ

0

При импорте он просматривает папку python для импорта и файлы в локальном каталоге. Если вы хотите импортировать файл, который ни в одном из них, то я предлагаю использовать модуль

import sys 
sys.path.append(r'file-path\A') # Folder A 
import B.c 

sys Если вы не хотите, чтобы установить полный путь к файлу, то вы можете просто вернуться назад в предыдущий каталог с этим для того же самого эффекта.

sys.path.append('..') # Previous Directory 
+0

В качестве альтернативы пакет может быть установлен на сайт-пакеты в зависимости от целей 'A'. Но @ Стивен-Саммерс прав, это должно быть на вашем пути к питону. –

+0

Спасибо за ответ. Я сделал что-то подобное: PACKAGE_PARENT = '..' SCRIPT_DIR = os.path.dirname (os.path.realpath (os.path.join (os.getcwd(), os.path.expanduser (__ file__)))) sys.path.append (os.path.normpath (os.path.join (SCRIPT_DIR, PACKAGE_PARENT))) – RandomGuyqwert

Смежные вопросы