「这是我参与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前景最好,学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。下面有一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
上述这份完整版的Python全套学习资料已经上传CSDN官方,如果需要可以微信扫描下方CSDN官方认证二维码 即可领取
👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]](安全链接,放心点击)