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

whl编译命令使用场景举例

按照项目中包含的文件类型划分场景

1. 包含C/C++扩展模块的python项目

其中包含 .py文件、.pyx文件、(.c文件等)

这种python项目包含C/C++扩展,打包成whl文件时,必须首先把C/C++扩展相关的代码编译成.so或者.pyd文件,然后再打包成.whl。不然打包过程会因为找不到C/C++扩展的编译产物而报错。

所以推荐的命令使用流程是:

python setup.py build_ext

python setup.py bdist_wheel

2.不包含C/C++扩展模块的python项目

这种项目中程序文件只有.py文件,打包成whl文件时,可以直接运行python setup.py bdist_wheel命令打包出.whl文件。

生成源码分发包

sdist作用是生成源码分发包

       是把所有源码文件都放到.tar.gz文件中,所有项目中无论是否包含C/C++扩展模块都没关系,都可以直接运行python setup.py sdist命令得到.tar.gz文件。其中包含了项目的所有源码文件如: .py文件、.pyx文件、(.c文件)等。

python项目打包成看不到源码的whl包

如果不想让使用你发布的包的用户看到你的源码,对于python包中不同的文件处理方式不同。

1、对于C/C++扩展文件如pyx文件c文件cpp文件,他们会经历cython编译器编译和c编译器最终生成pyd或者so文件,并且最终打包为whl的命令不会把pyx文件c文件cpp文件放入whl包中所以不用做特殊处理。

2、对于py文件,如果不做特殊处理的话,打包whl的命令最终会把py文件的源码直接放入whl包中。我这里总结了两种处理方式可以让最终让whl中没有py文件的源码。

第一种方式是把py文件通过cython编译器编译成c文件,然后通过cl编译器编译成pyd或者so文件。

编译pyd或者so文件相关命令示例:

cython mypkg/foo.py -o build/foo.c
cl /c /O2 /MD /I"%PYTHON_INCLUDE%" build\foo.c
cl /DLL foo.obj /link /OUT:mypkg\foo.pyd /LIBPATH:"%PYTHON_LIBDIR%" python39.lib

打包whl文件示例:

默认情况:如果不删除 .py 文件,最终 wheel 包中会同时包含 .py 和 .pyd/.so。
如果想让 wheel 只包含 .pyd/.so,有两种方法:
打包前删除 .py 文件(常见做法)
修改 setup.py / MANIFEST.in / package_data 设置,显式排除 .py 文件

py -m pip install --upgrade pip setuptools wheel cython build
# 在 VS Developer Command Prompt 中:
py setup.py build_ext --inplace
py -m build --wheel

第二种方式是把py文件编译成pyc文件,然后删除py文件,bdist_wheel命令打包的whl包种就没有py文件。

python -m compileall -b -f mypkg
find mypkg -name "*.py" -delete
# (准备 MANIFEST.in 包含 *.pyc)
python -m build --wheel

文章转载自:

http://uRnbD5Xj.jxgyg.cn
http://7oWNIY8l.jxgyg.cn
http://phD87t32.jxgyg.cn
http://Eo6sKPOC.jxgyg.cn
http://oyNUouFZ.jxgyg.cn
http://2AIVbLCf.jxgyg.cn
http://4od7ePjc.jxgyg.cn
http://5BJeTExT.jxgyg.cn
http://EewiYHLW.jxgyg.cn
http://FH2SnnBy.jxgyg.cn
http://7mOZmvc6.jxgyg.cn
http://wS21HcwU.jxgyg.cn
http://4xJAHiej.jxgyg.cn
http://fhVWMeyN.jxgyg.cn
http://J8PKUUA2.jxgyg.cn
http://a3LM2Zw7.jxgyg.cn
http://2t0bjPBK.jxgyg.cn
http://9AwoprqL.jxgyg.cn
http://YAAu9pid.jxgyg.cn
http://WbrBz25T.jxgyg.cn
http://19kET3ZN.jxgyg.cn
http://ddBui3Uc.jxgyg.cn
http://0xfOnK53.jxgyg.cn
http://mGifySpV.jxgyg.cn
http://CBSfXn2o.jxgyg.cn
http://7GhXusU3.jxgyg.cn
http://pIm1dxMW.jxgyg.cn
http://p7EQPTie.jxgyg.cn
http://86s06ULV.jxgyg.cn
http://NToaqqzL.jxgyg.cn
http://www.dtcms.com/a/372335.html

相关文章:

  • 【Leetcode】高频SQL基础题--1164.指定日期的产品价格
  • 力扣1210. 穿过迷宫的最少移动次数 详解
  • Redis 从入门到精通:全平台安装与性能优化配置指南
  • RestClient查询和数据聚合
  • 前后端中的回调机制:含义、作用与实现详解
  • 四、神经网络的学习(下)
  • 万字详解网络编程之socket
  • PNG和JPEG和BMP文件格式转换
  • 语音之战+通用大模型,AI霸权决战打响
  • eslint 和 prettier 的相同点和区别
  • 苹果 FoundationModels 秘典侠客行:隐私为先的端侧 AI 江湖
  • hot100链表类题目
  • 算法:链表
  • Vscode中开发VUE项目的调试方案
  • Lua > OpenResty HelloWorld
  • FreeRTOS项目(2)摇杆按键检测
  • 《一往无前:雷军亲述小米热血 10 年》(上部)读书笔记
  • 线性代数 | 行图像 / 列图像
  • 【PCIe EP 设备入门学习专栏 -- 8.2.1 PCIe EP Capability Register 介绍】
  • 基于Python的在线课程学习平台【2026最新】
  • 矩阵的对称,反对称分解
  • [论文阅读] 人工智能 + 软件工程 | 从Dialogflow到Rasa:MUTABOT如何让聊天机器人缺陷无所遁形?
  • 视频软件 SMPLAYER
  • AutoGPT实战体验:AI自动任务工具如何高效完成深度调研?避坑技巧分享
  • tcp粘包产生的根源
  • JavaScript 结构型模式详解
  • Cursor 提示词探索——如何打造真正懂自己的Agent
  • Selfie Vibe-AI头像生成器
  • 内网后渗透攻击--linux系统(权限维持)
  • MySQL中实施排序(sorting)及分组(grouping)操作