내 자신의 용도로 일부 모듈을 구성하려고합니다. 다음과 같은 것이 있습니다.
lib/
  __init__.py
  settings.py
  foo/
    __init__.py
    someobject.py
  bar/
    __init__.py
    somethingelse.py
에서는 lib/__init__.pylib를 가져올 때 사용할 클래스를 정의하고 싶습니다. 그러나 클래스를 파일로 분리하지 않고는 알아낼 수 없으며 __init__.py.
말보다는 :
    lib/
      __init__.py
      settings.py
      helperclass.py
      foo/
        __init__.py
        someobject.py
      bar/
        __init__.py
        somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
나는 다음과 같은 것을 원한다.
    lib/
      __init__.py  #Helper defined in this file
      settings.py
      foo/
        __init__.py
        someobject.py
      bar/
        __init__.py
        somethingelse.py
from lib.settings import Values
from lib import Helper
가능합니까 아니면 클래스를 다른 파일로 분리해야합니까?
편집하다
좋습니다. 다른 스크립트에서 lib를 가져 오면 Helper 클래스에 액세스 할 수 있습니다. settings.py에서 Helper 클래스에 액세스하려면 어떻게해야합니까?
여기 의 예 는 패키지 내 참조를 설명합니다. 나는 “서로를 참조 할 필요가있는 서브 모듈”을 인용한다. 제 경우에는 lib.settings.py에 Helper가 필요하고 lib.foo.someobject에는 Helper에 대한 액세스 권한이 필요하므로 Helper 클래스를 어디에서 정의해야합니까?
답변
- 
‘
lib/의 부모 디렉토리에 있어야합니다sys.path. - 
‘
lib/__init__.py‘은 다음과 같습니다.from . import settings # or just 'import settings' on old Python versions class Helper(object): pass 
그러면 다음 예제가 작동합니다.
from lib.settings import Values
from lib import Helper
질문의 수정 된 버전에 대한 답변 :
__init__.py패키지가 외부에서 어떻게 보이는지 정의합니다. Helperin 을 사용해야 하는 경우 다른 파일 (예 : ‘ ‘) 에서 settings.py정의 Helper하십시오 lib/helper.py.
.
| `-import_submodule.py
    `-lib
    |-__init__.py
    |-foo
    | |-__init__.py
    | `-someobject.py
    |-helper.py
    `-settings.py
2 개의 디렉토리, 6 개의 파일
명령 :
$ python import_submodule.py
산출:
settings
helper
Helper in lib.settings
someobject
Helper in lib.foo.someobject
# ./import_submodule.py
import fnmatch, os
from lib.settings import Values
from lib import Helper
print
for root, dirs, files in os.walk('.'):
    for f in fnmatch.filter(files, '*.py'):
        print "# %s/%s" % (os.path.basename(root), f)
        print open(os.path.join(root, f)).read()
        print
# lib/helper.py
print 'helper'
class Helper(object):
    def __init__(self, module_name):
        print "Helper in", module_name
# lib/settings.py
print "settings"
import helper
class Values(object):
    pass
helper.Helper(__name__)
# lib/__init__.py
#from __future__ import absolute_import
import settings, foo.someobject, helper
Helper = helper.Helper
# foo/someobject.py
print "someobject"
from .. import helper
helper.Helper(__name__)
# foo/__init__.py
import someobject
답변
경우 lib/__init__.py도우미 클래스를 정의하는 것은 다음 settings.py에서 당신은 사용할 수 있습니다 :
from . import Helper
이것은. 현재 디렉토리이며 설정 모듈의 관점에서 lib 패키지의 동의어 역할을합니다. 를 통해 Helper를 내보낼 필요는 없습니다 __all__.
(Windows에서 실행되는 python 2.7.10으로 확인되었습니다.)
답변
__init__.py에 넣으면됩니다.
따라서 test / classes.py는 다음과 같습니다.
class A(object): pass
class B(object): pass
… 그리고 test / __ init__.py는 다음과 같습니다.
from classes import *
class Helper(object): pass
테스트를 가져올 수 있으며 A, B 및 Helper에 액세스 할 수 있습니다.
>>> import test
>>> test.A
<class 'test.classes.A'>
>>> test.B
<class 'test.classes.B'>
>>> test.Helper
<class 'test.Helper'>
답변
이것과 같은 것을 추가하십시오 lib/__init__.py
from .helperclass import Helper
이제 직접 가져올 수 있습니다.
from lib import Helper
답변
내가 질문을 오해했기 때문에 편집하십시오.
그냥 넣어 Helper에서 클래스를 __init__.py. 완벽하게 비단뱀입니다. Java와 같은 언어에서 나오는 것이 이상하게 느껴집니다.
답변
예, 가능합니다. 또한 정의 할 수 있습니다 __all__에 __init__.py파일을 저장합니다. 가져올 때 가져올 모듈 목록입니다.
from lib import *
답변
아마도 이것은 작동 할 수 있습니다.
import __init__ as lib