2014-08-17 2 views
2

Я использую проект elses кого-то, чтобы добавить некоторые функции для моего, и есть скрипт python, который я хочу импортировать. Проблема связана с структурой импорта их каталогов: я поместил их каталог проекта в подпапку под моим основным проектом (должен остаться там, чтобы я мог сохранить свой проект из моего контроля версий): он выглядит так:Прикованный импорт из подкаталога в python

myproject/ 
    myscript.py 
    theirproject/ 
    __init__.py 
    baz.py 
    secondlayer/ 
     __init__.py 
     all.py 
     foo.py 
     bar.py 

all.py просто список операторов импорта, которые импортируют дополнительные скрипты из каталога secondlayer так:

from secondlayer.foo import * 
from secondlayer.bar import * #etc 

Я хотел бы импортировать:

from theirproject.secondlayer.all import * 

но терпит неудачу, когда питон не жалуется «не модуль с именем secondlayer.foo» Я также попробовал следующее:

from theirproject.secondlayer import all 

я могу заставить его работать, когда я помещаю мой сценарий в theirproject/и импортировать все без " ихпроект ", но я действительно не могу быть таким. Я могу получить еще в процессе импорта путем импорта Foo, Bar и т.д. по отдельности, как это:

from theirproject.secondlayer import foo 
from theirproject.secondlayer import bar #etc 

Но эти сценарии не импортировать больше вещей из еще других сценариев (например, baz.py) на том же уровне, второй слой, поэтому я застрял.

Каков правильный способ сделать это в python 2.7.6?

ответ

0

Я в конечном итоге решить мою проблему, добавив theirproject/к моему PYTHONPATH. Я поддержал ответ junnytony - это помогло мне указать в правильном направлении, так что спасибо!

1

Если изменить

from secondlayer.foo import * 
from secondlayer.bar import * 

к пользователю относительно импорта, как этот

from .foo import * 
from .bar import * 

или как этот

from foo import * 
from bar import * 

он работает.

Кроме того, вы могли бы сделать этот импорт в __init__.py на secondlayer уровня, с тем, что импорт из myscript.py становится

from theirproject.secondlayer.all import * 
0

Смотрите, если у вас есть необходимые разрешения на импорт пакета из каталога и его соответствующих подкаталогов.

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

Python Imports do not work

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