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']
...
)
참조 문서 : 네임 스페이스 패키지 .