如何制作自己的python .whl包(支持entry_points)

news2024/9/27 7:16:15

目录

    • 代码目录结构如下截图所示:
    • dir_test.py 源码如下:
    • list/dir_list.py 源码如下:
    • setup.py 文件源码
    • 生成.whl文件指令:

代码目录结构如下截图所示:

在这里插入图片描述

dir_test.py 源码如下:

import os
import sys
from pathlib import Path

def show():
    print(f"---->>>> king ca...")

def current_file() -> str:
    return os.path.realpath(__file__)

def current_dir() -> str:
    return os.path.dirname(current_file())

def set_python_path():
    root = Path(current_dir())
    sys.path.append(str(root)) #主要是这个函数来解决相对路径问题

def run():
    from list.dir_list import list_dir_contents #这行代码也很重要,不能放到code最前面,要确保在set_python_path()之后执行
    current_directory = os.getcwd()
    print(f"当前目录: {current_directory}")

    # 示例:列出当前目录及其所有子目录的内容
    print("\n列出当前目录及其子目录的所有内容:")
    list_dir_contents(current_directory)

    # 示例:只列出文件
    print("\n只列出文件:")
    list_dir_contents(current_directory, is_file_only=True)

    # 示例:只列出目录
    print("\n只列出目录:")
    list_dir_contents(current_directory, is_dir_only=True)

    show()

def main():
    set_python_path() #这个很关键,否则运行时会找不到自己py工程子目录下的py模块
    run()

if __name__ == "__main__":
    main()

list/dir_list.py 源码如下:

import os

def list_dir_contents(startpath, indent=0, is_file_only=False, is_dir_only=False):
    """
    递归地列出目录内容。

    :param startpath: 开始列出的目录路径。
    :param indent: 缩进级别,用于递归时显示层级结构。
    :param is_file_only: 如果为True,则只列出文件。
    :param is_dir_only: 如果为True,则只列出目录。
    """
    if is_file_only and is_dir_only:
        print("不能同时只列出文件和只列出目录。")
        return

    for root, dirs, files in os.walk(startpath):
        level = root.replace(startpath, '').count(os.sep)
        indent_str = '    ' * (indent + level)
        subindent = '    ' * indent

        if not is_file_only:
            for dir in dirs:
                print(f"{indent_str}[D] {dir}")

        if not is_dir_only:
            for file in files:
                print(f"{indent_str}[F] {file}")

        # 递归调用以列出子目录的内容(如果需要的话)
        # 注意:这里我们没有增加indent,因为每个新的os.walk循环已经处理了缩进
        # 但你可以根据需要调整indent参数来改变缩进级别


setup.py 文件源码

from setuptools import setup, find_packages

setup(
    name='ax_dirtest',
    version='0.9.9',
    packages=find_packages(),
    install_requires=[
        # 这里列出你的包依赖项
    ],
    include_package_data=True,
    entry_points={
        'console_scripts': [
            'ax_dirtest = ax_dirtest.dir_test:main',
        ],
    },
)

整个工程代码压缩包:

注意:

  1. 每个子目录下,均需要加一个__init__.py文件,哪怕里面没内容,也需要加上。因为打包成.whl文件时,会判断目录下是否有__init__.py文件,有才会去打包这个目录下的.py文件;
  2. 若要打包其他数据文件(非.py文件),需要在setup.py同级目录增加一个MANIFEST.in文件,文件内容书写格式自行百度(例如后续.exe图标可以以这个形式增加);
  3. 上述工程code安装后,使用者能够看到源码,后续需要完善一下。

生成.whl文件指令:

python setup.py bdist_wheel

生成的.whl文件在dist目录下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RunAsDate(时间限制工具)

参考链接1 参考链接2 参考链接3 下载地址 ps:64位系统需要下载64的RunAsDate

LAMP架构详解

目录 一、Apache详解 1.1 简介 1.2 Apache功能 1.3 apache特点 1.4 三种工作模式 二、LAMP简介 2.1 LAMP平台概述 2.2 构建LAMP平台顺序 2.3 编译安装的优点 2.4 各组件的主要作用 三、wget命令 四、curl命令 五、压力测试工具 一、Apache详解 1.1 简介 Apache …

vue2,v-for中动态渲染本地的图片

一、描述 如果是正常在img标签的src上使用本地的url地址,是可以正常被渲染的,但是我们通过for的形式,动态渲染的话,就会通过网络请求的方式进行渲染,这个形式反而渲染不出来。 二、效果 这个效果,毋庸置…

LVS负载均衡集群部署之—NAT模式的介绍及搭建步骤

一、环境准备 1.准备三台rhel9服务器 服务器名称 主机名 ip地址备注LVS调度服务器lvs.timinglee.org eth0:172.25.254.100(外网) eth1:192.168.0.100(内网) 关闭selinux和防火墙webserver2网站服务器webserver1.timinglee.orgeth0:192.168.…

为什么高校开设微专业,建议搭建动作捕捉与数字人开发实训室?

随着近年来虚拟现实技术产业与元宇宙产业不断发展,动作捕捉技术成为元宇宙、VR/AR、影视动画、游戏、艺术创作、虚拟偶像等行业相关不可或缺的技术之一。各大院校为了探索新的教学模式,纷纷积极开设“微专业”,相比传统的虚拟仿真实训室来说&…

Linux进程调度与切换

目录 前言 Linux 2.6内核O(1)调度器 调度过程 调度算法 Linux 进程切换 前言 在Linux 2.6版本的内核中,进程调度器引入了O(1)调度器,这个调度器通过优先级队列、活跃队列和过期队列的机制来管理进程调度,虽然在现在已被更好的CFS调度器取代,但对于我…

中仕公考:2024年空军专业技能类文职人员公开招考公告

2024年空军专业技能类文职人员公开招考公告,有关事项公告如下: 一、招考岗位 主要有保管员、司机、炊事员、文印员、汽车修理工兼司机等专业技能三级以下岗位。 二、招考对象 符合岗位资格条件的社会人员(含高校应届毕业生、退役军人)。 根据军队有…

理解栈(Stack)及其在 C++ 中的应用【栈、数据结构】

在这篇博客中,我们将详细介绍栈(Stack)这一重要的数据结构,包括其基本概念、常用操作、C 中的实现,以及一些实际应用。 什么是栈? 栈是一种数据结构,它遵循“后进先出”(LIFO - La…

上海AI Lab 搭台,36个大模型一起角逐长上下文建模能力

现在的大模型论文简直像是在比长度,动不动就上百页!记得前阵子小编瞅见那份90页的Gemini技术报告,顿时脑袋嗡嗡作响。那会儿就幻想着:要是有个AI大脑来啃下这些"学术巨无霸",那岂不是爽歪歪? 没…

SpringDoc:一个用于自动生成API文档的工具

SpringDoc的使用 概述SpringDoc添加依赖配置 Springdoc创建 REST 控制器访问 API 文档添加注释和描述自定义配置常用注解 详细示例创建模型类创建REST控制器查看Swagger UI与OpenAPI 安全策略类型概述HTTPAPIKEYOAUTH2OPENIDCONNECTMUTUALTLS 请求头配置认证token代码实现验证 …

C++:C++11介绍

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一、C11简介 二 统一的列表初始化 2.1 {} 初始化 2.2 std::initializer_list 三 声明 3.1 auto 3.2 decltype 3.3 nullptr 四 范围for循环 五 智能指针 六 STL中一些变化…

瑞_RabbitMQ_初识MQ

文章目录 1 初识MQ1.1 同步调用1.1.1 同步调用的优势1.1.2 同步调用的缺点 1.2 异步调用1.2.1 异步调用的角色1.2.2 异步调用的优势1.2.3 异步调用的缺点1.2.4 异步调用的场景 1.3 MQ技术选型 2 RabbitMQ2.1 安装2.1.1 资源准备2.1.2 安装步骤 2.2 RabbitMQ架构2.3 RabbitMQ管理…

Starrocks解析json数组

json数据 [{"spec": "70g/支","unit": "支","skuId": "1707823848651276346","amount": 6,"weight": 70,"spuName": "伊利 甄稀 苦咖啡味雪糕 流心冰淇淋 70g/支",&quo…

你不知道,PMP证书的含金量究竟有多高

PMP考试的含金量体现在其全球认可度、对职业发展的助力、薪资潜力的提升、系统的知识体系、持续学习的要求以及专业网络的建设等方面。 尽管存在一定的维护成本和市场饱和度问题,PMP认证仍然是项目管理领域内备受推崇的资格证书。 对于追求专业发展和提升项目管理…

【安卓】发送自定义广播

文章目录 发送标准广播发送有序广播 发送标准广播 先定义一个BroadcastReceiver来准备接收广播,新建一个MyBroadcastReceiver。 public class MyBroadcastReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {To…

惊爆!OpenAI 高层发生剧烈动荡!竟然有 3 名元老同时离职,同时,马斯克竟起诉奥特曼“敲诈勒索”, GPT-5 要推迟了?

当今之 OpenAI 可谓是事端频出,波澜迭起。 开端之际,马斯克竟对 OpenAI提起诉讼,随后,重要的元老级高管公开宣告离职,而且还被披露高管领导层内部动荡不安,最终,就连原本定于年底发布的 GPT-5 …

【JVM基础15】——实践-JVM参数可以在哪里设置

目录 1- 引言:2- ⭐核心:2-1 Tomcat 设置 JVM 参数2-2 Jar包设置 JVM 参数 3- 小结:3-1 JVM参数可以在哪里设置 1- 引言: 一般这种问题是涉及到项目部署时候的参数设置,一般的部署方式 war 包部署在 tomcat 中设置jar…

MySQL第5讲--DML(数据操作语言)的基本操作

文章目录 前言DML(数据操作语言)基本操作增加数据案例展示修改数据案例展示删除数据 DML总结 前言 在第四讲MySQL第4讲–图像化界面工具DataGrip介绍中我们讲述了数据库的可视化操作界面;今天我们讲一下数据库中DML(数据操作语言)的基本操作; DML(数据操…

灵办AI:智能插件,办公与编程的得力助手

目录 引言一、灵办AI:智能化的办公伙伴二、编程能力:🔥代码阅读,学习助手🔥1、代码解读2、代码续写3、代码优化 三、插件端对话功能:智能交互,流畅体验四、翻译功能:一键翻译&#x…