PyPA 지침에 따라 패키지 빌드

Python은 2022년에 반드시 배워야 할 언어입니다.
1991년 귀도 반 로섬(Guido van Rossum)이 처음 개발했으며 교육에서 의학에 이르기까지 다양한 산업 분야에서 사용됩니다.

패키지를 만들고 배포하기 위한 다양한 도구와 기술이 있습니다.

PyPA(Python Packaging Authority)는 Python 패키지를 빌드하고 공유하기 위한 지침을 제안합니다.

이 기사에서는 small python package implementing the LRU Cache을 작성합니다.

리콜의 경우 LRU(최소 최근 사용)는 캐시가 가득 찼을 때 새 요소를 위한 공간을 만들기 위해 캐시에서 요소를 제거하는 캐싱 전략입니다. 요컨대 가장 최근 항목이 먼저 삭제됩니다.

다음은 LRU 캐시의 코드입니다.

from collections import OrderedDict

class LRUCache(OrderedDict):

    def __init__(self, capacity: int):
        self.capacity = capacity

    def put(self, key: str, value: str) -> None:
        if key in self:
            self.move_to_end(key)
        self[key] = value
        if len(self) > self.capacity:
            self.popitem(last=False)

    def get(self, key: str) -> int | str:
        if key not in self:
            return -1
        self.move_to_end(key)
        return self[key]

    def show_entries(self) -> None:
        print(self)


PyPA는 재사용 가능한 패키지를 빌드하기 위해 샘플 프로젝트를 사용할 것을 권장하며 다음에서 사용할 수 있습니다: https://github.com/pypa/sampleproject .


기억해야 할 가장 중요한 파일은 다음과 같습니다.
  • setup.py : 패키지를 빌드하고 설치하기 위한 스크립트입니다. 여기에는 전역 setup() 함수가 포함되어 있습니다.
  • setup.cfg : setup.py에서 기본값을 정의하는 데 사용할 수 있는 구성 파일입니다.
  • setup() : 이름, 버전, 설명, URL, 작성자, 라이센스와 같은 많은 인수를 이 함수에 전달할 수 있습니다.
  • data : 필요한 경우 데이터 파일을 추가할 위치입니다.
  • tests : 모듈에 대한 단위 테스트를 추가하기 위한 자리 표시자입니다.
  • src/<package> : 내부에 모든 모듈과 패키지가 포함된 최상위 패키지입니다.

  • 저장소를 복제하고 수정해 보겠습니다.

    $ git clone https://github.com/pypa/sampleproject.git lru-cache
    


    패키지 프로젝트에 따라 인수로 업데이트setup.py했습니다. 다음은 파일의 스니펫입니다.

    setup(
        name="lrucache",
        version="0.1.0",
        description="LRU Cache for illustration purpose",
        long_description=long_description,
        long_description_content_type="text/markdown",  
        url="https://github.com/abdelino17/lru-cache",
        author="Abdel FARE",  
        author_email="[email protected]", 
        keywords="cache, lru, setuptools, development", 
        package_dir={"": "src"}, 
        packages=find_packages(where="src"),  
        python_requires=">=3.7, <4",
        project_urls={
            "Bug Reports": "https://github.com/abdelino17/lru-cache/issues",
            "Source": "https://github.com/abdelino17/lru-cache"
        }
    )
    


    setup.py 파일을 사용하여 lru-cache 패키지를 로컬 및 전 세계에 공유할 준비가 되었습니다.

    빌드하기 전에 패키지 구조는 다음과 같습니다.


    간단히 하기 위해 다음을 __init__.py 파일에 추가해 보겠습니다.

    from .lrucache import LRUCache
    


    테스트 파일의 내용은 다음과 같습니다.

    import unittest
    
    from lrucache import LRUCache
    
    CACHE_CAPACITY = 3
    
    class TestLRUCache(unittest.TestCase):
    
        def setUp(self) -> None:
            super().setUp()
            self.lruCache = LRUCache(CACHE_CAPACITY)
    
        def test_cache(self):
            self.lruCache.put("1", "1")
            self.lruCache.put("2", "2")
            self.lruCache.put("3", "3")
    
            self.assertEqual(self.lruCache.get("1"), "1")
            self.assertEqual(self.lruCache.get("3"), "3")
    
            self.lruCache.put("4", "4")
            self.assertEqual(self.lruCache.get("2"), -1)
    
            self.lruCache.put("5", "5")
            self.assertEqual(self.lruCache.get("1"), -1)
    
    
    if __name__ == '__main__':
        unittest.main()
    


    로컬 소스에서 설치



    다음 명령을 실행하여 로컬 소스에서 패키지를 설치해 보겠습니다.

    $ pip install <path_to_package>
    


    다음은 명령의 콘솔 출력입니다.


    패키지가 성공적으로 설치되었으며 이제 명령줄에서 사용할 수 있습니다.

    테스트 PyPI에 패키지 게시.



    다음 단계로 샘플 패키지를 PyPI 테스트 리포지토리에 추가합니다.

    패키지 게시를 위한 명령을 실행하기 전에 Test PyPI에서 계정을 만들고 API 토큰을 가져와야 합니다.

    Test PyPI website에서 토큰 생성 및 추가에 대한 모든 정보를 찾을 수 있습니다.

    패키지를 푸시하려면 Twine utility 도 필요합니다. pip로 설치할 수 있습니다.

    $ pip install twine
    


    이제 패키지를 업로드할 준비가 되었습니다. 이를 위해 다음 단계를 실행합니다.

    1. 다음 명령을 사용하여 배포판을 만듭니다.

    $ python setup.py sdist
    


    2.Test PyPI에 배포 파일을 업로드합니다.

    $ twine upload --repository testpypi dist/lrucache-0.1.0.tar.gz
    


    이 명령은 패키지 파일을 Test PyPI 리포지토리로 푸시합니다.


    우리는 거기에 갈! 이제 커뮤니티에서 패키지를 사용할 수 있습니다.

    좋은 웹페이지 즐겨찾기