zoukankan      html  css  js  c++  java
  • python之PypI打包whl文件

    一.简单介绍

    python中我们经常会用到第三方的包作为工具,比如爬虫解析工具,网络请求工具等。之所以要把它封装成包,意识为了技术与业务分离,二是为了能多
    项目多平台共用。python里面用到的第三方工具包基本都是从Pypi.org里面下载的。下面具体介绍如何打一个自己的包上传到Pypi中作为工具使用。

    二.Pypi打包whl文件

    首先,我们需要确认我们需要打包的package中已经包含了README.mdLICENSE[非必须]setup/py文件。三者分别是说明文档,许可证以及
    python setuptools所用来安装该package的构建脚本。

    2.1 setup.py

    setup.py中包含了package对应的信息(例如该package的名称、版本、作者)以及该package应当包含的程序文件和数据。

    下面是一个setup.py的示例文件:

    import os
    from setuptools import setup, find_packages
    
    
    path = os.path.abspath(os.path.dirname(__file__))
    
    try:
      with open(os.path.join(path, 'README.md')) as f:
        long_description = f.read()
    except Exception as e:
      long_description = "customize okta cli"
    
    setup(
        name = "okta-cmd",
        version = "0.1.0",
        keywords = ("pip", "okta", "cli", "cmd", "steven"),
        description = "okta cli",
        long_description = long_description,
        long_description_content_type='text/markdown',
        python_requires=">=3.5.0",
        license = "MIT Licence",
    
        url = "https://github.com/stevenQiang/okta-cmd",
        author = "steven",
        author_email = "qianggao7@gmail.com",
    
        packages = find_packages(),
        include_package_data = True,
        install_requires = ["requests", "click"],
        platforms = "any",
    
        scripts = [],
        entry_points = {
            'console_scripts': [
                'okta-cmd=oktacmd:main_cli'
            ]
        }
    )
    
    • name: 该package的名字,该名字可以由字母、数字、-组成,注意这个名字不能与其它已经上传到pypi.org的项目相同
    • version: 这个就是包的发布版本,可以直接写在这,也可以从其它地方引用
    • author: author可以用来指定该package的作者信息
    • author_email: 这个也是指定该package的作者信息
    • description: 对当前package的较短的总结
    • long_description: 是对当前package的详细说明。这一详细说明将被展示在Python Package Index上当前项目的主页
    • long_description_content_type: 指定了long_description内容的格式。在当前情况下为markdown
    • url: 是当前package的主页链接。大多数情况下这是一个GitHub, GitLab, Bitbucket或者其他代码存储服务的链接
    • packages: 是一系列应当包含在发布软件包文件(distribution package)中的可被import的python包文件。我们可以手动在此处罗列所有文件。
      或者如本例中一样使用find_packages()函数自动包含所有的python包文件以及子包文件。
    • python_requires: python依懒版本
    • classifiers: 指定了当前package的其他元信息(metadata)。例如当前package兼容的python版本和操作系统,当前package提供的功能的类型,
      当前package的许可证等等。我们应当总是至少包括当前package所支持的python版本,操作系统和许可证。注意此处定义的classifiers关键字
      所包含的信息应当符合PyPI的规定。
    • install_requires: 指定了当前package所依赖的其他python类库。这些指定的python类库将会在本package被安装的时候一并被安装。
    • platforms: 程序适用的软件平台列表
    • keywords: 程序的关键字列表
    • include_package_data: 是否自动包含包内所有受版本控制(cvs/svn/git)的数据文件,默认True
    • entry_points: 用来支持自动生成cli命令

    使用上面的配置信息之后,会生成一个okta-cmd的命令,可以直接使用,就是在entry_points里面配置的。

    目录结构:

    ├── LICENSE
    ├── README.md
    ├── oktacmd
    │   ├── __init__.py
    │   ├── cli.py
    │   ├── common.py
    │   ├── main.py
    │   └── okta.py
    ├── setup.py
    └── setup.sh
    

    生成包:
    1.安装最新版的setuptools和wheel

    python3 -m pip install --user --upgrade setuptools wheel
    

    2.使用sdist构建源码分发包

    python setup.py sdist bdist_wheel
    

    注意: 这里是固定的命令(确保setup.py存在于当前路径下)

    当这个命令运行结束后,确保在生成的dist/文件夹下存在相应的.whl文件和.tar.gz文件。其中.tar.gz文件是我们的python package的源文件文档,
    而.whl是一个软件分发包(build distribution)。新版本的pip将会首先尝试安装软件分发包,但在失败情况下会接着尝试采用源文件包安装。

    三.上传项目至PyPI

    1. 首先注册一个PyPI的账号,链接https://pypi.org/
    2. 安装最新版本twine
    python3 -m pip install --user --upgrade twine
    

    3.上传项目
    使用twine上传项目的时候需要输入相应的PyPI的账号和密码。

    python3 -m twine upload dist/*
    
  • 相关阅读:
    设计模式之享元模式
    延时任务的实现
    Git代码分支开发工作流程
    设计模式之责任链模式
    Docker 三剑客 到 k8s 介绍
    写操作系统之实现进程
    写操作系统之开发加载器
    写操作系统之开发引导扇区
    写操作系统之搭建开发环境
    怎么实现系统调用wait和exit
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/13099552.html
Copyright © 2011-2022 走看看