верижен импорт от поддиректория в python

Използвам чужд проект, за да добавя някаква функционалност към моя, и има скрипт на Python, който искам да импортирам. Проблемът идва със структурата за импортиране на техните директории: поставих тяхната директория с проекти в подпапка под моя основен проект (трябва да остане там, за да мога да държа проекта им извън моя контрол на версиите) изглежда така:

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

all.py е просто списък с оператори за импортиране, които импортират допълнителни скриптове от директорията на втория слой по следния начин:

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

Бих искал да импортирам:

from theirproject.secondlayer.all import *

но това се проваля, когато python се оплаква „няма модул с име secondlayer.foo“ Опитах и ​​следното:

from theirproject.secondlayer import all

Мога да го накарам да работи, когато поставя скрипта си в theirproject/ и импортирам всичко без префикса "theirproject", но наистина не мога да го оставя така. Мога да продължа процеса на импортиране, като импортирам foo, bar и т.н. поотделно по този начин:

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

Но след това тези скриптове не успяват да импортират повече неща от други скриптове (като baz.py) на същото ниво като secondlayer, така че останах.

Какъв е правилният начин да направите това в python 2.7.6?


person domoarigato    schedule 17.08.2014    source източник


Отговори (3)


Ако промените

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

към потребителски относителен импорт като този

from .foo import *
from .bar import *

или като това

from foo import *
from bar import *

работи.

Освен това можете да направите тези импортирания в __init__.py на ниво втори слой, така че импортирането от myscript.py да стане

from theirproject.secondlayer.all import *
person junnytony    schedule 17.08.2014

Вижте дали имате необходимите разрешения за импортиране на пакета от вашата директория и съответните й поддиректории.

За справка може да искате да видите това и съответните свързани с него въпроси:

Импортирането на Python не работи

person Varun    schedule 18.08.2014

В крайна сметка реших проблема си, като добавих theirproject/ към моя PYTHONPATH. Подкрепих отговора на junnytony - помогна ми да ме насочи в правилната посока, така че благодаря!

person domoarigato    schedule 20.08.2014