ローカルPythonコードをPythonサードパーティライブラリ(Pypi)にアップロード

6846 ワード

プログラマーはプログラミングに対して自分の「やり方」を持っていて、良いやり方は多重化とIT界の伝播を得ることができます.どうやって実現するのかという疑問があります.ここでは、自分が書いたPythonパッケージをPython公式サイトのサードパーティライブラリに転送し、すべての人がpip(/pip 3)install packageでダウンロードできる方法を紹介します.
Pythonの世界では、Distutilsというツールモジュールがこの問題を簡単に解決してくれます.それなら、パッケージの旅を始めましょう.
コードをパッケージ化するには、まずコードがパッケージであることを確認します.フォルダの下にinitが必要ですpyファイル(Pychramを使用すると、自動的に生成されるパッケージを作成できます.)残りは、これらのコードをこのフォルダの下に入れるだけです.パッケージ化されたファイル構造は、次のようになります.
package_zong
    |
    +-- LICENSE
    |
    +-- README.txt
    |
    +-- setup.py
    |
    +-- package1
    .       |
    .       +-- __init__.py
    .       |
    .       +-- myscripts1.py
    .       |
    .       +-- mysscripts2.py
    .       |
    .       +-- *************.py
    .       |
    .
    |
    +-- package2
    .       |
    .       +-- __init__.py
    .       |
    .       +-- myscripts1.py
    .       |
    .       +-- mysscripts2.py
    .       |
    .       +-- *************.py
    .       |
    .
    |
    +-- docs/
    |

わあ、どう見ても、こんなにたくさんの書類は、実は多くありません.説明は以下の通りです.
  • package_zongというフォルダは下の多くのファイルとフォルダを保存しているので、何の役にも立たない.
  • LICENSEはライセンスファイルで、中にはあなたのこのパッケージについてのライセンスが入っています.MIT licenseの具体的な内容は:
  • です.
    MIT License
    
    Copyright (c) 2018 lichanghong
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
    
  • README.txt、この書類はきっと研究開発がはっきりしているはずだ.もしあれば、できるだけここに何かを置いて、後で私たちがそれを使うことができるならば.注意しなければならないのは、WindowsのリターンはLinuxとは違うので、Windowsを使うことをお勧めします.
  • setup.py、コアファイル、この中の内容はすぐに話します.
  • package 1、package 2(n個あってもいい、n個あってもいい)はあなたのパッケージの名前で、パッケージの中にmyscripts*があります.pyの各種ファイルはあなたの元の各種コードモジュールです(このような.pyファイルはn個、つまりn個のモジュールがあります).init.pyファイル(ファイルの内容が空であってもよい)は、現在のフォルダがパッケージであることを示します.
  • docs/、このフォルダにdocumentsを置いてください.でも、心を込めてドキュメントを書くのは難しいですね.テストをするだけなら、このフォルダは存在しなくてもいいです.

  • コアファイルsetupについて説明します.py(Pypiの主なファイルにアップロード):具体的な内容は以下の通りです.
    import codecs
    import os
    import sys
    try:
        from setuptools import setup
    except:
        from distutils.core import setup
    
    def read(fname):
        return codecs.open(os.path.join(os.path.dirname(__file__), fname)).read()
    
    NAME = "wenyali_pypi_test"
    PACKAGES = ['package1','package2']
    DESCRIPTION = "this is a test for package by myself upload to pypi"
    LONG_DESCRIPTION = "this is a test for package by myself upload to pypi"
    KEYWORDS = "keyword"
    AUTHOR = "wenyali"
    AUTHOR_EMAIL = "[email protected]"
    URL = "https://github.com/lichanghong/wenyali.git"
    VERSION = "1.0.0"
    LICENSE = "MIT"
    setup(
        name =NAME,version = VERSION,
        description = DESCRIPTION,long_description =LONG_DESCRIPTION,
        classifiers =[
            'License :: OSI Approved :: MIT License',
            'Programming Language :: Python',
            'Intended Audience :: Developers',
            'Operating System :: OS Independent',
        ],
        keywords =KEYWORDS,author = AUTHOR,
        author_email = AUTHOR_EMAIL,url = URL, 
        packages = PACKAGES,include_package_data=True,zip_safe=True,
        entry_points={
          "console_scripts": [
                              "wenyali_console = package1.index:index",
                              ]
          },
    
    )
    

    setup.pyファイルの内容の説明:
  • setupライブラリはパッケージ化の過程で導入しなければならない.
  • readメソッドREADMEファイルの内容を長い説明として読み出すのが一般的です.これはPyPIのパッケージのページに表示されます.この方法ではなく、自分で手動で内容を書くこともできます.PyPIでサポートrst形式のファイル.しばらくサポートしません.md形式のファイル、.rstファイルPyPIは自動的にそれをHTML形式に変えてあなたのパッケージの情報ページに表示します.
  • NAME:名前、一般的にあなたのかばんの名前を置くことができて、pypiの関連する規則の下で、勝手に名前をつけることができます;
  • PACKAGES:含まれるパッケージは、複数可能であり、これはリストである.
  • DESCRIPTION:このパッケージについての説明;
  • LONG_DESCRIPTION:readメソッドの説明を参照してください.
  • KEYWORDS:現在のパッケージのいくつかのキーワードについて、PyPIの分類を容易にする.
  • AUTOR:包作者の名前;
  • AUTHOR_EMAIL:作者のメールアドレス;
  • URL:このパッケージのプロジェクトアドレスがあれば、一つください.PyPIに直接記入しなくてもいいです.
  • VERSION:現在のパッケージのバージョン、これはあなた自身が必要とするバージョン制御方式によって来ます;
  • LICENSE:ライセンス方式、私が好きなのはMITの方式で、あなたは他の方式に変えることができます:
  • setupを書く必要があるならpyファイル、上のコピーをして、情報をあなたのものに変更すればいいです.次の点に注意してください.
  • 文のclassifiersの内容は勝手に記入されているわけではありません.この文書のPyPI Classifiersを参照して書く必要があります.
  • entry_pointsというキーワードは、python環境で実行する必要がなく、このツールを使用できることを意味します.中には多くのパラメータが含まれています.具体的な内容は自分で資料を調べてください.

  • Pypiへのファイルの実行
    コマンドラインでpackage_にパスを切り替えます.zongフォルダの下には、パッケージアップロードを実行する3行のコマンド(python 3のソフトウェア環境を使用しています):
     python3 setup.py check 
    

    説明:出力は通常running checkで、エラーや警告があれば、その後に表示され、Distutilsがこのsetuupを承認したことを示す表示はありません.pyファイル.
    python3 setup.py sdist
    

    説明:コマンドが実行するとパッケージの状態が出力されます.warningがある場合は、後で対応する場所を変更してから、再パッケージすることができます.正常な場合は、ルートディレクトリの下にdist/のフォルダフォルダフォルダに現在パッケージされているものが含まれていることがわかります.zipファイル.あるいはtar.gzファイル.
    twine upload dist/*
    

    説明:distの下のすべてのファイルをPypiにアップロードし、後でユーザー名とパスワードを入力します.ここにはいくつかの問題があります.
  • まず行かなければなりませんhttps://pypi.org/公式サイトにアカウントを登録するには、これが必要です.
  • python setup.py register sdist uploadを使用することをお勧めしません.これはsslエラーを報告します.
  • setup.pyファイルの中でNAMEの名前は必ず規範に合致しなければならなくて、さもなくば新聞403の誤りを報告して、この時distフォルダを削除しなければならなくて、それから再パッケージする必要があって、具体的な規範は見ることができますhttps://pypi.org/help/#project-name

  • アップロードしたパッケージをローカルにダウンロードし、テストを実行
    pip install wenyali_pypi_test(            ) 
    #    python3    
    from package1 import myscripts1,myscripts2
    #       myscripts1   myscripts2     ,    main  :
    myscripts2.main()
    

    もしあなたがsetupにいたら.pyファイルにentry_が追加されましたpointsでは、python 3環境に入らずに直接実行できます.
    wenyali_console
    

    この結果は、どのメソッドが呼び出されたかを示します.package 1パッケージのindexモジュールのindexメソッドを呼び出しました.詳細は、次のように参照してください.
     entry_points={
          "console_scripts": [
                              "wenyali_console = package1.index:index",
                              ]
          },