python的神奇功能二、源码打包

2022/2/2 11:12:37

本文主要是介绍python的神奇功能二、源码打包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」

源码打包~wheel方式

python的wheel介绍

wheel是python中的一个打包方式,它可以为你软件的依赖库或依赖软件提供打包,它打包的依赖包可以在每次使用都可以很方便的安装而不需要再次编译。

wheel的官方文档是wheel.readthedocs.io/en/latest/。

在它的使用过程中,有2个限制的地方: 1.提供给“setuptools”中的“bdist_wheel”命令的实现必须是“setuptools”的拓展 (A setuptools extension for building wheels that provides the bdist_wheel setuptools command) 2.这个打包命令只能在命令窗口中运行。 (A command line tool for working with wheel files)

setuptools官方文档setuptools.readthedocs.io/en/latest/.

wheel命令的相关帮助信息

(pkg) michaelkoo@MacBook much % wheel
usage: wheel [-h] {unpack,pack,convert,version,help} ...

positional arguments:
  {unpack,pack,convert,version,help}
                        commands
    unpack              Unpack wheel
    pack                Repack wheel
    convert             Convert egg or wininst to wheel
    version             Print version and exit
    help                Show this help

optional arguments:
  -h, --help            show this help message and exit

python 的wheel打包方式

整理源码为python模块

  • 新建源码koo.py,在koo.py添加以下内容:
def ko():
    print('it is ko invoke')

def mm():
    print('it is mm invoke')

name = 'mm ko'

  • 在源码目录中,除了源码之外,还需要有setup.py文件,在setup.py文件中输入配置信息:
from setuptools import setup

setup(name='KaKaHelper',version='1.0.1',py_modules=['koo'],description='A helper for KaKa',author='KaKa',author_email='jjkchen@foxmail.com',license='MIT',keywords='ka helper',install_requires=['scapy>=2.4.4','psutil>=5.8.0'],python_requires='>=3'),

  • 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文件中。

  • 输入README.md
# KaKaHelper
This is helper for kaka

  • 创建__init__.py

在__init__.py中输入以下内容:

from .koo import *

  • 当前目录的内容:
README.md	__init__.py	koo.py		setup.py

  • 输入配置信息之后,在当前目录中,打开终端输入如下命令生成压缩包文件:
python setup.py sdist

操作成功后,会有如下提示信息:

running sdist
running egg_info
writing requirements to KaKaHelper.egg-info/requires.txt
writing KaKaHelper.egg-info/PKG-INFO
writing top-level names to KaKaHelper.egg-info/top_level.txt
writing dependency_links to KaKaHelper.egg-info/dependency_links.txt
reading manifest file 'KaKaHelper.egg-info/SOURCES.txt'
writing manifest file 'KaKaHelper.egg-info/SOURCES.txt'
running check
warning: check: missing required meta-data: url

creating KaKaHelper-1.0.1
creating KaKaHelper-1.0.1/KaKaHelper.egg-info
copying files to KaKaHelper-1.0.1...
copying README.md -> KaKaHelper-1.0.1
copying koo.py -> KaKaHelper-1.0.1
copying setup.py -> KaKaHelper-1.0.1
copying KaKaHelper.egg-info/PKG-INFO -> KaKaHelper-1.0.1/KaKaHelper.egg-info
copying KaKaHelper.egg-info/SOURCES.txt -> KaKaHelper-1.0.1/KaKaHelper.egg-info
copying KaKaHelper.egg-info/dependency_links.txt -> KaKaHelper-1.0.1/KaKaHelper.egg-info
copying KaKaHelper.egg-info/requires.txt -> KaKaHelper-1.0.1/KaKaHelper.egg-info
copying KaKaHelper.egg-info/top_level.txt -> KaKaHelper-1.0.1/KaKaHelper.egg-info
Writing KaKaHelper-1.0.1/setup.cfg
creating dist
Creating tar archive
removing 'KaKaHelper-1.0.1' (and everything under it)

当前目录下,也会生成dist目录,在dist中包含有以下内容:

(pkg) michaelkoo@MacBook kaka % ls dist 
KaKaHelper-1.0.1.tar.gz

截止到目前为止,以【源代码发布包】的形式已打包完成。

  • 使用如下命令创建wheel安装包
 python setup.py bdist_wheel

运行结果如下:

running bdist_wheel
running build
running build_py
creating build
creating build/lib
copying koo.py -> build/lib
installing to build/bdist.macosx-10.15-x86_64/wheel
running install
running install_lib
creating build/bdist.macosx-10.15-x86_64
creating build/bdist.macosx-10.15-x86_64/wheel
copying build/lib/koo.py -> build/bdist.macosx-10.15-x86_64/wheel
running install_egg_info
running egg_info
writing requirements to KaKaHelper.egg-info/requires.txt
writing KaKaHelper.egg-info/PKG-INFO
writing top-level names to KaKaHelper.egg-info/top_level.txt
writing dependency_links to KaKaHelper.egg-info/dependency_links.txt
reading manifest file 'KaKaHelper.egg-info/SOURCES.txt'
writing manifest file 'KaKaHelper.egg-info/SOURCES.txt'
Copying KaKaHelper.egg-info to build/bdist.macosx-10.15-x86_64/wheel/KaKaHelper-1.0.1-py2.7.egg-info
running install_scripts
creating build/bdist.macosx-10.15-x86_64/wheel/KaKaHelper-1.0.1.dist-info/WHEEL
creating 'dist/KaKaHelper-1.0.1-py2-none-any.whl' and adding 'build/bdist.macosx-10.15-x86_64/wheel' to it
adding 'koo.py'
adding 'KaKaHelper-1.0.1.dist-info/METADATA'
adding 'KaKaHelper-1.0.1.dist-info/WHEEL'
adding 'KaKaHelper-1.0.1.dist-info/top_level.txt'
adding 'KaKaHelper-1.0.1.dist-info/RECORD'
removing build/bdist.macosx-10.15-x86_64/wheel

现在在dist中就已经有了whl安装包:

michaelkoo@MacBook kaka % ls dist 
KaKaHelper-1.0.1-py3-none-any.whl	KaKaHelper-1.0.1.tar.gz

python 的wheel安装方式

按照以上步骤,我们生成好了wheel安装包,那我们现在来安装:

  • 首先找到whl目录
  • 然后检查下,当前环境有没有安装【KaKaHelper】
(pkg) michaelkoo@MacBook kaka % pip list
Package    Version
---------- -------
pip        21.0.1
psutil     5.8.0
scapy      2.4.4
setuptools 53.1.0
wheel      0.36.2

从以上输出可知,当前环境中没有安装KaKaHelper

  • 使用如下命令进行安装:
pip install --no-index KaKaHelper-1.0.1-py2-none-any.whl


安装结果如下:

Processing ./KaKaHelper-1.0.1-py3-none-any.whl
Requirement already satisfied: scapy>=2.4.4 in /Users/michaelkoo/work/env/pkg/lib/python3.7/site-packages (from KaKaHelper==1.0.1) (2.4.4)
Requirement already satisfied: psutil>=5.8.0 in /Users/michaelkoo/work/env/pkg/lib/python3.7/site-packages (from KaKaHelper==1.0.1) (5.8.0)
Installing collected packages: KaKaHelper
Successfully installed KaKaHelper-1.0.1

  • 再次查看当前环境的库安装情况:
(pkg) michaelkoo@MacBook kaka % pip list
Package    Version
---------- -------
KaKaHelper 1.0.1
pip        21.0.1
psutil     5.8.0
scapy      2.4.4
setuptools 53.1.0
wheel      0.36.2

可以看到已经安装好【KaKaHelper 1.0.1】

验证安装情况

新建test.py来验证安装情况,在test.py文件中输入以下内容:

from koo import *
ko()

print(name)

运行结果如下:

(pkg) michaelkoo@MacBook pkg % python test.py 
it is ko invoke
mm ko

至此已完成wheel从打包到安装,再到使用得环节。

常规错误提示

ERROR:is not support

ERROR: KaKaHelper-1.0.1-py2-none-any.whl is not a supported wheel on this platform.

解答方案:

默认情况下,python环境是2.x,在我当前环境中是python3.x,所以这个安装不适合我当前环境,另外在安装的名称中【py2】也表明了环境,如果需要指定python环境,可以在setup.py文件中使用【python_requires='>=3'】



这篇关于python的神奇功能二、源码打包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程