python - 패키지란 - 파이썬__init__



일반적인 파이썬 네임 스페이스 패키징 (1)

앞으로 며칠 내에 PyPI에 보관해야하는 라이브러리를 패키지로 만들고 업로드하려고 합니다만, 네임 스페이스에 대한 내 접근 방식에 대해서는 약간 확신 할 수 없습니다.

비슷한 접근법을 가진 관련없는 프로젝트를 몇 개 갖고 있는데, 모두 동일한 네임 스페이스를 제공하고 싶었습니다. 예 :

  • 라이브러리 1 네임 스페이스 : abc.seo
  • 라이브러리 2 네임 스페이스 : abc.ajax
  • 라이브러리 3 네임 스페이스 : abc.ecommerce
  • 기타

문제는 두 개의 개별 패키지 (예 : 계란)가 동일한 상위 네임 스페이스와 공존 할 수 있는지 확실하지 않다는 것입니다. 이 접근법은 문제가 있습니까, 아니면 주위에 방법이 있습니까? 최선의 접근 방식은 무엇입니까?

라이브러리는 함께 패키징되어서는 안되며 너무 관련이 없습니다. "공식"릴리스를 작성한 후 고통스러운 네임 스페이스 변경을 피하기 위해 업로드하기 전에 바로 가져오고 싶습니다.

(NB abc 는 실제 이름이 아니며, 광고에서 자유로운 질문을하고 싶었습니다.)

최신 정보

나는 setuptools가 설치되지 않은 사람들에게 친절하기 위해 다음과 같이 갔다.

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)

setup.py 에서 다음과 같이하십시오.

setup(
    ...
    namespace_packages = ['rollyourown'],
    ...

각 프로젝트 기본 디렉토리에서 다음 구조를 작성하십시오.

/setup.py
/abc/__init__.py
/abc/seo/

/abc/__init__.py 에는 다음 /abc/__init__.py 포함됩니다.

__import__('pkg_resources').declare_namespace(__name__)

setup.py 는 다음을 포함합니다 :

setup(...,
    packages: ['abc', 'abc.seo'],
    namespace_packages = ['abc']
    ...
)

참조 문서 : 네임 스페이스 패키지 .





pypi