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

posted @ 2019-05-26 19:45  我是谁,我在哪  阅读(462)  评论(0编辑  收藏  举报