zoukankan      html  css  js  c++  java
  • python打包,上传包知识点学习

    python 打包工具推荐

    PyPi

    PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库

    pip可正常工作在Windows、Mac OS、Unix/Linux等操作系统上,但是需要至少2.6+和3.2+的CPython或PyPy的支持。python 2.7.9 和3.4以后的版本已经内置累pip程序,所以不需要安装

    安装包的工具

      1. 使用pip安装来自PyPI的包
      2. 将virtrualenv或venv用于python环境的应用级隔离

    创建包与分发的公工具

      1. 使用setuptools来定义项目并创建源代码发行版
      2. 使用wheel而不是egg来创建构建发行版
      3. 使用twine向PyPI上传包的发行版

    pip install安装包与python install安装包的区别

    项目配置

    组织大型应用的代码的最简单的方法旧式将其分成几个包,这样做将使代码更容易理解,维护和修改,也使每个包的可复用性最大化,就像使用组件一样方便。

    setup.py

    对于一个需要被分发的包来说,其根目录包含一个setup.py脚本。它定义了distutils模块中描述的所有元数据,并将其合并为标准的setup()函数调用的参数。虽然distutils是一个标准库模块,但还是建议你使用setuptools包来代替,它对标准的distutils做了一些改进。(distutils标准库的增强版,适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本)

    Distutils使用介绍:https://blog.csdn.net/fireflychh/article/details/80162981

    setup()函数,此函数的参数指定了如何配置自己的项目。
    命令行工具,包括打包,测试,发布等。可以通过下面的命令查看;python setup.py --help-commands

    setup.py文件中至少包含内容如下:

    from setuptools import setup
    setup(
        name="mypackage"
    )
    

      name给出了包的全名,该脚本提供了一些命令

           standard commands:标准命令,是distutils提供的内置命令

    Extra commands:额外命令,是由setuptools这样的第三方包或任何其他定义并注册一个新命令的包所创建的

    setup.cfg

     setup.cfg文件包含setup.py脚本命令的默认选项,如果构建和分法包的过程很复杂,并且需要像setup.py命令中传入许多可选参数,那么这个文件非常有用,Setup.py先解析setup.cfg文件

    关于setup.py和setup.cfg的关系参考:https://blog.csdn.net/joelovegreen/article/details/46373619

    setup.cfg的语法与内置configparser模块提供的语法相同,类似与windows平台下的ini文件。

    setup.cfg 示例说明:

    [global]
    quiet=1
    
    [sdist]
    formats=zip,tar
    
    [bdist_wheel]
    universal=1
    

      这个配置示例可以确保源代码发行版是以两种格式创建(ZIP和TAR),并且构建wheel发行版将被创建为通用wheel(与pthon版本无关),此外,由于全局quiet开关,每个命令的大部分输出都将被阻止

    MANIFEST.in

    此文件在打包的时候告诉setuptools还需要额外打包那些文件

    一般情况下,使用sdist命令构建发行版是,distutils将浏览包的目录,查找需要包含在文档中的文件,distutils将包含:

      1. py_modules,packages,和scripts选项隐含的所有pthon源文件
      2. ext_modules选项列出的所有C源文件
      3. 匹配glob模式test/test*.py的文件包括:README,README.txt,setup.py和setup.cfg
      4. 如果你的包是由svn或CVS管理,那么sdist还将浏览诸如.svn之类的文件夹

    如果你还像要包含除disutils包含文件之外的文件使,比如一些静态文件,那么在与setup.py相同的目录中,你可以为MANIFSET文件定义一个名为MANIFEST.in的模板,在其中你可以指定sdist要包含哪些文件

    这个模板的每一行都定义一条包含或排除规则,例如:

    include HISTORY.txt

    include README.txt

    include CHANGES.txt

    include LICENSE

    recursive -include *.txt *.py

    参考:http://www.imooc.com/article/253042

    trove分离器

    pypi和distutils为应用程序的分类提供了一个解决方案,就是使用一套被称为trove分类器。所有分类器都形成一个树状结构,每个分类器都是字符串形式,其中用::字符串分隔每个命名空间,分类器列表在包定义中是作为setup()函数的classifiers参数。例如如下项目的分类其列表:

    from setuptools import setup
    setup(
        name="solrq",
        classifiers=[
            'Development Status::4 -Beta',
            'License::OSI Approver :: BSD License',
            'Operating System :: OS Independent',
            'Programing Language :: Python',
            'Programing Language :: Python :: 2',
            'Programing Language :: Python :: 2.6',
        ]
    )
    

      这个参数是可选的,trove还可以提供一些信息:支持的python版本或系统,项目的开发阶段或发布代码所使用的许可证

    python命名空间和作用域详解:https://www.jb51.net/article/114951.htm

    上传一个包

    在pypi上发布自己的包:https://www.cnblogs.com/sting2me/p/6550897.html

    一篇非常好的python打包分发文章,内容几乎都囊括而且还易懂:https://blog.csdn.net/chenfeidi1/article/details/80873979

    常用工具

    PyInstaller

      PyInstaller是一个压缩python文件成为可执行程序的一个软件。它会扫描你所有的Python文档,并分析所有代码从而找出所有你的代码运行所需的模块。然后,PyInstaller会将所有这些模块和你的code放在一个文件夹里,或者一个可执行文件里。这样以来,你的用户就不用下载各种你的软件运行环境了,例如各种版本的python,各种不同的python包等等。他们只需要执行打包好的可执行文件就可以使用你的软件了

    下面是PyInstaller使用的一个简单示范:

    将你的一个python文件:Hello.py打包成可执行文件: 
    在终端的命令行简单的输入: 
    pyinstaller Hello.py 
    在当前的文件目录里面,将会生成两个文件夹:build和dist。dist里面就是所有可执行文件了

     

    pyinstaller参数介绍以及总结:https://blog.csdn.net/bearstarx/article/details/81054134

    总结Pyinstaller的坑及终极解决方法:https://blog.csdn.net/u012313895/article/details/78271313https://blog.csdn.net/u014563989/article/details/80940321

  • 相关阅读:
    Mac 国内安装homebrew办法
    字符串方法及注释
    文件的操作
    集合
    Mac下CVS文件编码转换
    字符串格式化
    postman常用断言的一些内置方法
    get与post区别
    pygame知识点(持续更新)
    记录第一次使用
  • 原文地址:https://www.cnblogs.com/gzl420/p/10926988.html
Copyright © 2011-2022 走看看