当前位置 主页 > 网站技术 > 代码类 >

    将python包发布到PyPI和制作whl文件方式

    栏目:代码类 时间:2019-12-25 12:10

    wheel文件

    Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容。按照官网说法,wheels是发行版Python的新标准并且要取代.egg。 Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义。 Wheel现在被认为是Python的二进制包的标准格式。

    以下是Wheel和Egg的主要的不同点:

    Wheel有一个官方的PEP427来定义,而Egg没有PEP定义。

    Wheel是一种分发格式,即打包格式。而Egg既是一种分发格式,也是一种 运行时安装的格式,并且是可以被import的。

    Wheel文件不会包含.pyc文件

    Wheel使用和PEP376兼容的.dist-info目录,而Egg使用.egg-info目录。

    Wheel有着更丰富的命名规则。

    Wheel是有版本的,每个Wheel文件都包含wheel规格的版本和打包它的实现。

    Wheel在内部被sysconfig path type管理,因此转向其他格式也更容易。

    distutils和setuptools工具

    用来Python环境中构建和安装额外的模块,模块可以基于Python,也可以C/C++写的扩展模块,可以是python包,包中包含了C和Python编写的模块。setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它是一组Python的 distutilsde工具的增强版(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。

    setuptools重点在于setup.py文件编写:

    setup.py参数介绍:

    name : 打包起来的包的文件名

    version : 版本号,添加为打包文件的后缀名

    author : 作者

    author_email : 作者的邮箱

    py_modules : 打包的.py文件

    packages: 打包的python文件夹

    include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name': [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)

    license : 支持的开源协议

    description : 对项目简短的一个形容

    ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。

    ext_package : 定义extension的相对路径

    requires : 定义依赖哪些模块

    provides : 定义可以为哪些模块提供依赖

    data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于

    sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。

    将python文件(.py)封装成可安装使用的模块

    参考:https://docs.python.org/3.6/distutils/introduction.html#distutils-simple-example

    printtest.py

    def test():
     print('print test')

    将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup.py中输入配置信息:

    from setuptools import setup
    setup(name='printtest',
      version='1.0',
      py_modules=['printtest'],
      )

    打开终端,定位到该文件夹下,输入:

    python setup.py sdist

    此时在目录中生成dist文件夹,文件夹中有testpg-1.0.tar.gz文件,用户安装的话只需要testpg-1.0.tar.gz文件即可。将此文件解压得到testpg-1.0文件夹,会发现该文件夹有我们刚刚书写的3个py文件,还有一个PKG-INFO,打开该文件,会显示该模块的具体信息:由于我们没有设置,所以为UNKOWN