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

目录

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

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目录下

相关推荐
熊猫钓鱼>_>几秒前
鸿蒙PC构建实战:hvigor modelVersion 降级 + schema 清理 + ArkTS 编译三连坑完整复盘
开发语言·华为·ai编程·harmonyos·openharmony·数据·ai生成
全栈陈序员4 分钟前
【Python】基础语法入门(二十五)—— 网络编程入门:用 socket 与 requests 联网
python
adminwolf8 分钟前
GoLiveChat:Open-Source Live Chat Software for Website
python
FRing0314 分钟前
JavaScript入门到精通三十一(原型继承、原型链)
开发语言·前端·javascript
1024奇点20 分钟前
【仓颉语言入门 · 第二篇 第 12 课】
开发语言·数据库·ide·mysql·开源
LDR00623 分钟前
LDR6100 智能遥控器精品软文:Type-C 充电口与低功耗量产维护
c语言·开发语言
成旭先生31 分钟前
车辆、能源与地理数据 API 实战:把定价、油价、行政区划串成一条链路
人工智能·windows·能源·api集成·油价查询·车辆定价·地址清洗
工具派1 小时前
PDF签名贴上去为什么发虚?尺寸、DPI与坐标的边界实测
java·python·pdf
iCxhust1 小时前
MATLAB SPWM仿真
开发语言·matlab
谙忆1 小时前
PNG改成ICO为什么不能用:用Python检查多尺寸目录与256px帧
开发语言·python