PyPI 로그인 단계~pip install까지~

내가 이 기사를 쓰려고 한 계기는 PyData.Okinawa#34-LT 콘퍼런스에 "PyPI에 포장된 사연을 올렸다"고 말한 것이다.이 LT를 하면서 PyPI에 포장을 올리는 지식을 얻었기 때문에 PyPI에 올리고 싶었는데 어떻게 해야 좋을지 모르는 분들의 도움을 받았으면 좋겠어요.
첫 투고니까 참고가 된다면 리뷰가 기쁠 것 같아요!!
실제 발표된 LT 총회 자료다.
PyPI에 포장을 올려주시면...

PyPI 소개


PyPI는 파이썬 Package Index의 약칭으로 파이썬 포장을 관리하는 사이트다.
패키지를 PyPI에 업로드하여 pip를 사용하여 설치할 수 있습니다.
PyPI는 PIP로 읽습니다.
최근 파이썬 Package Index의 웹 사이트가 업데이트된 것이 최신 방법입니다.

업로드 전 프로세스


계정 생성부터 업로드까지의 절차를 기술합니다.
  • 계정 창설
  • setup.py의 제작
  • 개발
  • 테스트
  • 발표물 제작
  • 패키지의 등록/업로드
  • 계정 만들기


    PyPI에서는 정식 환경과 테스트 환경이 있기 때문에 각각 계정을 만들어야 한다.그러니 우선 계좌를 만드세요.
  • 공식 환경: https://pypi.org/account/register/
  • 테스트 환경: https://test.pypi.org/register/
  • setup.py 생성


    기본적으로 PyPI 공식 GiitHub의 예는 매우 추천합니다.
    https://github.com/pypa/sampleproject/blob/master/setup.py
    실제 제작된 명령의 setup입니다.py 여기 있습니다.
    setup.py
    #!/usr/bin/env python
    # coding: utf-8
    
    from setuptools import setup, find_packages
    from codecs import open
    from os import path
    
    here = path.abspath(path.dirname(__file__))
    
    with open(path.join(here, 'README.md'), encoding='utf-8') as f:
        long_description = f.read()
    
    setup(
        name='pydata',
        version='1.0.0',
        description='PyData Location List',
        long_description=long_description,
        url='https://github.com/takezyou/pydata',
        author='takezyou',
        author_email='[email protected]',
        license='MIT',
        # 実際に動かす時に依存関係にあるライブラリをinstallしてくれる
        install_requires=['beautifulsoup4', 'lxml'],
        keywords='pydata',
        packages=find_packages(exclude=('tests')),
        # 今回コマンドを作ったのでconsole_scriptsを記述している
        entry_points={
            "console_scripts": [
                "pydata=pydata.__init__:main",
            ],
        },
        classifiers=[
            'License :: OSI Approved :: MIT License',
            'Programming Language :: Python :: 3.5',
            'Programming Language :: Python :: 3.6',
        ],
    )
    

    개발하다


    이번에 제작된 명령의 목록 구조는 이런 느낌이다.
    pydata는 주요 프로그램이다.
    명세서py의 시험을 쓰고 있습니다.
    이것은 우리가 만든 https://github.com/takezyou/pydata의 창고다.
    여기, 힘내서 개발합시다!!
    .
    ├── LICENSE.txt
    ├── README.md
    ├── pydata
    │   ├── __init__.py
    │   ├── command.py
    │   └── list.py
    ├── setup.py
    └── tests
        ├── __init__.py
        └── test_list.py
    

    테스트


    테스트에서 기본적으로 모든 기능을 테스트한다.
    테스트의 확인 방법은 테스트에 적혀 있으면 아래의 느낌에 따라 실행할 수 있습니다.
    $ python setup.py test
    

    배포된 아이템 만들기


    만든 물건을 포장하는 작업입니다.sdist 배급품을 만드는 방법도 있지만 이번엔 wheel라고 불리는 물건으로 바이너리 포장(정식 문서 추천wheel을 만들었다.명령을 간단하게 만들 수 있습니다.
    ※ 필요 없는 포장서류는 미리 삭제
    $ pip install wheel
    $ python setup.py bdist_wheel
    

    패키지 등록 및 업로드


    우선 홈 디렉터리에 .pypirc를 만듭니다.
    .pypirc
    [distutils]
    index-servers =
        pypi
        testpypi
    
    # 本番環境
    # passwordとusernameはアカウント作成の時のものを利用する
    [pypi]
    username: takezyou
    password: user_password
    
    # テスト環境
    # passwordとusernameはアカウント作成の時のものを利用する
    [testpypi]
    repository: https://test.pypi.org/legacy/
    username: takezyou
    password: user_password
    
    업로드 시 twine 업로드 패키지를 사용합니다.
    ※ 같은 버전은 한 번만 올릴 수 있으니 주의하세요.
    $ pip install twine
    
    그럼, 준비됐으니까 테스트 환경에 올려봐.
    # テスト環境に先ほど作ったバイナリのパッケージをアップロードする
    $ twine upload --repository testpypi dist/*
    
    # テスト環境にアップロードしたパッケージをインストールする
    $ pip install --index-url https://test.pypi.org/simple/ <パッケージ名>
    
    테스트 환경에 설치된 물건이 실제로 문제가 없다면 정식 환경에 업로드한다.
    # 本番環境にパッケージをアップロード
    $ twine upload --repository pypi dist/*
    
    올릴 수 있으면 이렇게 되는 느낌.

    pip install 하자!!!


    그러면 마지막으로 만든 매크로 패키지 pip install 을
    사용할 수 있다면 ok!!
    # 実際にpip installする
    $ pip install <パッケージ名>
    

    참고 문헌

  • Packaging and distributing projects
  • PyPI에서 Python이 만든 라이브러리 공개/업로드
  • PyPI 데뷔 2015
  • 좋은 웹페이지 즐겨찾기