2015-04-29 2 views
0

У меня есть эта структура каталогов:Включить файлы из внешнего каталога

__init__.py 
/Report 
    ReportData.py 
    __init__.py 
/Technology 
    TechnologyRSS.py 
    __init__.py 
/International_news 
    International.py 
    __init__.py 

Если я ставлю from ..Report.ReportData import Report я получаю следующую ошибку.

Входной

python3 TechnologyRSS.py 

Выход

File "TechnologyRSS.py", line 3, in <module> 
    from ..Report.ReportData import Report # Report class. 
SystemError: Parent module '' not loaded, cannot perform relative import 

Я поставил from __future__ import absolute_import во всех моих файлов и ничего не изменилось.

Кроме того, я попытался выполнить свой скрипт, используя эту команду с помощью терминала:

ввода

python ./Technology/TechnologyRSS.py 

Выход

Traceback (most recent call last): 
    File "./Technology/TechnologyRSS.py", line 4, in <module> 
    from .Report.ReportData import Report # Report class. 
ValueError: Attempted relative import in non-package 

Python версии: 3.4.3

+0

Возможно (например, если это на вашем пути Python), но это не идеально. Как вы оказались в этой структуре? – jonrsharpe

+0

Report.py содержит общий класс, который мне нужен для доступа к нему из разных поддиректоров. –

+0

Все ли эти файлы в пакете? * Могли бы они? – jonrsharpe

ответ

1
from __future__ import absolute_import # must be first line in file 
from ..report import report # could be from .report import report I forget which one, that's what happens when you depend on IDE code completion as a crutch :) 

Измененный выше Ответ, который я должен был выше применим к Python 2.7, но python3 отличается. Там вам не понадобится абсолютный_импорт, то есть поведение по умолчанию Вы неправильно используете файл. Предположим, что это ваша структура каталогов

/home/itsme/myproj/ 
    __init__.py 
    /Report 
     ReportData.py 
     __init__.py 
    /Technology 
     TechnologyRSS.py 
     __init__.py 
    /International_news 
     International.py 
     __init__.py 

изменить

TechnologyRSS.py

from Report.ReportData import Report 
... # rest of your code 

Тогда в/главная/itsme/MYPROJ/Exec этот

python3 -m Technology.TechnologyRSS 

Конечно для этого есть какие-либо Эффект, технология RSS должна быть, конечно, выполнена, но

+0

Я пробовал код, который вы мне поставили, и у меня есть следующая ошибка Traceback (последний последний звонок): Файл «TechnologyRSS.py», строка 4, в из отчета .Report import SystemError: Parent module '' не загружен, не может выполнить относительный импорт –

+0

Я предполагаю, что у ваших модулей нет файлов __init__.py? – pbhowmick

+0

@pbhowmick, учитывая, что OP ничего не показывает, вероятно, безопасно предположить столько же! – jonrsharpe

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