2014-12-31 3 views
4

setuptools documentation 네임 스페이스에서 __init__.py 파일에 코드를 추가하는 방법에 대해 매우 명시 적이다 :setuptools를 사용하면 네임 스페이스 패키지 __init__.py 파일은 언제 사라 집니까?

당신은 다른 어떤 코드와 데이터를 포함해서는 안 네임 스페이스 패키지의 __init__.py. 개발 중에 또는 프로젝트가 .egg 파일로 설치 될 때 작동하는 것처럼 보일지라도 "시스템"패키징 도구를 사용하여 프로젝트를 설치하면 작동하지 않습니다.이 경우 __init__.py 파일은 설치되지 않습니다. 실행.

그러나 "시스템"패키징 도구가 무엇인지 이해하지 못합니다. 그들은 무엇인가? __init__.py 파일이없는 상황을 어떻게 재현 할 수 있습니까?

+0

좋은 질문입니다. I * guess * "시스템"패키징 도구는 ** apt-get ** 또는 ** brew **를 참조 할 수 있으며 시스템 전체에 패키지를 설치하지만 ** pip **는 로컬와는 다릅니다. – Anzel

답변

1

@ Anzel의 의견은 좋은 답변 인 것처럼 보였습니다. PEP-420은이를 확인했습니다. 그 Rationale section, 우리는 읽기 :

네임 스페이스 패키지가 여러 디렉토리에 걸쳐 분할 (따라서 여러 sys.path 항목을 통해 발견)하고 지원하기 위해 설계되었습니다. 이 구성에서는 각 부분이 네임 스페이스 패키지를 올바르게 초기화하는 한 여러 부분이 모두 __init__.py 파일을 제공하는지 여부는 중요하지 않습니다. 그러나 Linux 배포 공급 업체는 별도의 부분을 결합하여 모두 동일한 파일 시스템 디렉토리에 설치하는 것을 선호합니다. 이것은 많은 파일 시스템 관리자가 허용하지 않는 대상 시스템에서 동일한 파일을 제공하려고 시도하기 때문에 충돌 할 수 있습니다. 암시 적 네임 스페이스 패키지를 허용한다는 것은 __init__.py 파일을 제공해야한다는 요구 사항을 완전히 삭제할 수 있으며 영향을받는 부분을 공통 디렉토리에 설치하거나 여러 디렉토리에 분산시켜 배포가 적합하다고 판단 할 수 있습니다.

그렇기 때문에 OS 패키지 관리자 (및 다른 사람)는 파일을 하나의 디렉토리 트리에만 병합하기를 원하므로 더 많은 코드를 __init__.py 파일에 추가 할 수 없습니다.