当前位置: 首页 > news >正文

Python 自己简单地造一个轮子.whl文件

造轮子

  • 引言
  • 准备文件
    • 原始文件
    • 打包轮子文件
  • 运行
  • 验证
  • 工程文件

引言

平时使用的python第三方库很顺手,这第三方库一般都是大家一起努力的结果,那我们是不是也可以贡献一点力量呢?首先从造一个本地的.whl文件开始。

在python中,引用第三方库时,一般是pip install 你的包,这是在有网的情况下。有的时候网不好,速度较慢,会把包下载在本地,然后再从本地加载。下下来的包后缀就是.whl文件,加载时也是采用pip install 本地路径/包名.whl,这样pip的加载。

下面就简单地打一个.whl包

准备文件

一般的python项目会很大,而且不止有代码,所以就先把项目归归类。代码放在一起,文件放在一起(这么做的目的就是为了方便,也可以放在一起,只要能运行就好)

比如我们有下面这样的工程,代码和数据文件是分开的,这里给代码文件和数据文件夹里加了__init__.py,这是为了方便调用,打包的时候也需要,在数据文件data中采用绝对路径的方式去整理。

原始文件

在这里插入图片描述

shuru.py文件如下:

import os
import mydemo.code1.shuchu1 as sc

def shuchu():
    # 因为这个是在code文件夹下,所以找data只需要向前跳一级,而且这个也是不管在哪都可以找到路径
    path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))).replace('\\', '/')
    sc.shuchu1(path + '\data\*')

if __name__ == '__main__':
    print(os.path.abspath(os.path.join(os.getcwd(), "..")))
    shuchu()

shuru1.py文件如下

import os
from glob import glob


def output__(dirname):
    if glob(dirname):
        for f in glob(dirname):
            if f[-4:] == '.txt':
                print(f)
                with open(f, encoding='utf-8') as f_:  # 打开文件
                    print(f_.read())  # 读取文件

            else:
                output__(f + '\*')


def shuchu1(file_name):
    # 获取上上级目录
    print(os.path.abspath(os.path.join(os.getcwd(), "../..")))
    output__(file_name)


if __name__ == '__main__':
    # 因为这个是在code1文件夹下,所以找data需要向前跳两级
    output__(os.path.abspath(os.path.join(os.getcwd(), "../..") + '/data/*'))

data文件夹里面我只是放了几个文本文件,遍历输出了一下。

打包轮子文件

有这几个文件,具体可以看Python application 的打包和发布——(上) 和 Python application 的打包和发布——(下)

在这里插入图片描述

其中setup.py文件下这么写

import os
import setuptools

REQUIRED = [
    # 'tensorflow==2.9.1'
]

setuptools.setup(
    name='mydemo',  # 这里的名字要和代码文件名要一样。
    version='1.0',
    description='A MySDK for python sdk_demo.',  # 一个简要的介绍而已
    long_description=open(
        os.path.join(
            os.path.dirname(__file__),
            'README.rst'
        )
    ).read(),
    packages=setuptools.find_packages(),
    include_package_data=True,
    author='heKai',
    author_email='hekaiiii@163.com',
    install_requires=REQUIRED,
)

MANIFEST.in 文件这样写,就是添加数据文件

include data/data1/data11/data.txt
include data/data1/data.txt
include data/data2/data.txt
include data/data.txt
include data/data1.txt
include data/data2.txt

其他两个我都没写。

运行

在当前运行环境下,在命令行里进入setup.py所在的文件夹下,键入

python setup.py bdist_wheel

运行过后,刷新下文件夹,会在文件夹中新出现这几个文件
在这里插入图片描述

在build里就能看见咱们的代码和数据文件都已经打进去了。

打开disk,就发现打好的.whl文件了,直接在命令行里,键入pip命令就安装啦!

pip install mydemo-1.0-py3-none-any.whl

使用pip list 就可以看见了。
在这里插入图片描述

验证

新开个工程,引入就可以啦!

import mydemo.shuchu as sc

if __name__ == '__main__':
    print(sc.shuchu())

工程文件

代码文件我上传到这了。
python_to_whl
或者
python 文件打包轮子的样例工程文件

相关文章:

  • C# 数据结构
  • 数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库
  • 【函数栈帧的创建和销毁】 -- 神仙级别底层原理,你学会了吗?
  • Generated columns cannot be used in COPY
  • 2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧
  • 测试开发之Django实战示例 第十二章 创建API
  • Python 之 Matplotlib xticks 的再次说明、图形样式和子图
  • 2023美赛F题:绿色经济
  • 基于蜣螂算法改进的LSTM分类算法-附代码
  • 数字化系统使用率低的原因剖析
  • 【python百炼成魔】python之列表详解
  • ChatGPT国内镜像站初体验:聊天、Python代码生成等
  • K8s常见面试题总结
  • [TPAMI‘21] Heatmap Regression via Randomized Rounding
  • 【VictoriaMetrics】VictoriaMetrics集群伪分布式部署(二进制版)
  • springcloud+nacos+gateway案例
  • CSS 圆角边框 盒子阴影 文字阴影
  • 全志H3系统移植 | 移植主线最新uboot 2023.04和kernel 6.1.11到Nanopi NEO开发板
  • C++为什么能重夺年度语言?
  • 英国访问学者邀请函范例
  • 人民网评:“中国传递爱而不是关税”
  • 人民文学奖颁出,董宇辉获传播贡献奖
  • 云南省交通发展投资有限责任公司原党委书记、董事长陈以东接受审查调查
  • 中央宣传部原副部长张建春被提起公诉
  • 贵阳市消防救援支队原支队长李世永受审,为谋提拔给中管干部送25万
  • 国家统计局:3月全国城镇不包含在校生的16-24岁劳动力失业率降至16.5%