2017-11-10 1 views
0

코드를 패키지화하여 주요 기능 만 표시하려고합니다. 내가 internal_modules.B에서 internal_modules.A하지만 일부 작업을 가져 옵니까패키지의 구현 모듈과 서브 모듈 숨기기

./ 
    setup.py 
    my_module/ 
    __init__.py 
    public_functions.py 
    internal_modules/ 
     __init__.py 
     A.py 
     B.py 
     other_modules.py/ 
     __init__.py 
     C.py 

public_functions에서 모두 A.pyB.pyC.py에서 일부 기능을 사용하여 내 디렉토리는 다음과 같이한다. 다음과 같이

setup.py은 다음과 같습니다

from setuptools import setup 

setup(name='my_module', 
     version='0.1', 
     description='my_awesome_module', 
     author='Me', 
     author_email='[email protected]', 
     license='MIT', 
     packages=['my_module'], 
     zip_safe=False) 

내가 핍과를 설치하려면,하지만 난이 설치되면 내 패키지 내 internal_modules 볼 수의 가지 않도록합니다.

내가 제대로 설치할 수 있지만이

from my_module import public_module 

을 수행 할 때 그것은 public_module.py의 첫 번째 줄에 ImportError: no module named internal_modules.A가 발생합니다.

는 내가 다른 패키지로 내 setup.py 선언에 my_module.internal_modules를 추가하면 내가 고칠 수 알지만,이 A.py 설치 패키지에서 볼 수 B.py와 공공 내 internal_modules을 드릴 것입니다.

나는 비슷한 질문을 발견 here하지만 나를

답변

0

당신은 모듈 이름을 강조하여 수입에서 모듈의 내부를 숨길 수 있습니다 위해 작동하지 않습니다 :

_yourmodulenamegoeshere합니다.

E : 또한 패키지의 __init__에서 __all__ 정의 할 수 있습니다 - * 가져 오기를 통해 가져옵니다 __all__에서만 모듈 이름을.

+0

패키지의'__init__'에서'__all__'이 어떻게 작동하는지 모르겠습니다. 예를 들어 줄 수 있습니까? 그건 그렇고,'_internal_modules'는 밑줄 친 사실을 강조하고 있습니다. 이전과 같은 오류 ('my_module._internal_modules') –

+1

'__all__ = [ 'module1', 'module2']'는'from package import *'를 수행하는 경우에만 모듈 1과 2를 반입합니다. 당신이 원한다면 패키지의 용기에 직접 접근 할 수 있습니다. _underscored 모듈은'import package'를 실행했다면 기본적으로 가져 오지 말아야하지만 마찬가지로 - 전용 사용자가 여전히 액세스 할 수 있습니다. – jkm

관련 문제