Python 源码打包成.whl文件的完整指南

Python 项目开发完成后,如何优雅地发布和安装?传统的 python setup.py install 虽然可用,但不够现代化,也不方便在不同环境中快速分发。今天,我们就来详细讲解如何将 Python 源码打包成 .whl 文件(Wheel),并进行安装和分发。


一、为什么选择 .whl 文件

.whl 是 Python 官方推荐的二进制分发格式,相比传统的源码安装有几个优势:

  • 快速安装 :不需要编译,直接 pip install xxx.whl
  • 跨平台(纯 Python):如果没有 C 扩展,可以在不同操作系统间通用
  • 规范标准 :兼容现代 Python 打包工具,如 pipbuild
  • 可控依赖:打包时可以指定依赖,安装时自动拉取

二、项目结构准备

假设你的项目名称是 mypkg,最基础的目录结构如下:

text 复制代码
mypkg/
├── mypkg/
│   ├── __init__.py
│   └── core.py
├── README.md
├── setup.py        # 传统方式
└── pyproject.toml  # 现代方式推荐
  • mypkg/:核心代码
  • setup.py:兼容老项目的打包配置
  • pyproject.toml:现代标准的打包配置

三、现代方式:pyproject.toml 打包

Python 官方推荐使用 PEP 517/518 标准,通过 pyproject.toml 来描述构建和依赖信息。

1. 安装打包工具

bash 复制代码
pip install build wheel setuptools

2. 配置 pyproject.toml

toml 复制代码
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "mypkg"
version = "0.1.0"
description = "My Python Package"
readme = "README.md"
authors = [
  { name="Your Name", email="you@example.com" }
]
dependencies = []

[tool.setuptools.packages.find]
where = ["."]

3. 构建 .whl 文件

在项目根目录执行:

bash 复制代码
python -m build

生成结果在 dist/ 目录:

text 复制代码
dist/
├── mypkg-0.1.0-py3-none-any.whl
└── mypkg-0.1.0.tar.gz

4. 本地安装测试

bash 复制代码
pip install dist/mypkg-0.1.0-py3-none-any.whl

四、传统方式:setup.py 打包

对于老项目,如果还在用 setup.py,也可以生成 .whl

python 复制代码
# setup.py
from setuptools import setup, find_packages

setup(
    name="mypkg",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[],
)

构建:

bash 复制代码
python setup.py bdist_wheel

生成的 .whl 文件同样在 dist/ 目录。


五、源码保护与加密(可选)

.whl 文件本质上仍然包含源码,如果想防止直接查看 Python 代码,可以考虑:

方案 1:Cython 编译

text 复制代码
.py → .pyx → .so / .pyd → 打包成 whl

适合核心逻辑不想暴露的商业项目。

方案 2:PyArmor 混淆

bash 复制代码
pip install pyarmor
pyarmor gen mypkg/

可以对源码进行混淆,提高反编译成本。


六、总结

  1. .whl 是现代 Python 项目的推荐分发格式
  2. 现代方式使用 pyproject.toml + build,简单快捷
  3. 传统方式 setup.py 依然可用
  4. 可选混淆/编译策略保护核心源码

通过打包成 .whl,你可以方便地分发、安装和管理 Python 项目,让用户体验更流畅,也方便 CI/CD 自动化部署。

相关推荐
咖啡八杯12 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
掘金码甲哥12 小时前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵12 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn13 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
想会飞的蒲公英13 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel14 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记14 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名14 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code15 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook15 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化