程序落地部署——python库打包分发

Python项目打包部署到服务器的详细指南 本文将详细介绍如何将Python项目打包成可执行文件,并将其部署到服务器上。通过本文的学习,你将掌握Python项目打包和部署的整个过程。 阅读详情

1. 准备工作
1.1 必备python工具包
setuptools: setuptools是一组Python的 distutils工具的增强工具,可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。
wheel: wheel库是PEP 427中定义的Python wheel打包标准的参考实现。"wheel"是python的一种内置包格式,它是一种zip格式的存档文件,具有特殊格式的文件名和.whl扩展名。
twine: twine是一个用于在PyPI上发布Python包的python库,它为新项目和现有项目提供了独立于构建系统的源文件和二进制发布工件的上传。
1.2 Notes
dist的含义:dist全称为distribute,意为分发、发布等意思,许多程序框架中的dist文件夹的用途是存放最终发行版的程序源码。

Python 包的分发方式可分为两种:①以源码包的方式发布:源码包的本质是一个压缩包(.zip/.tar.gz等),其安装的过程是先解压→再编译→最后安装,所以它是跨平台的,由于每次安装都要进行编译,相对二进包安装方式来说安装速度较慢。②以二进制包的方式发布:二进制包(.egg/.wheel)的安装过程省去了编译的过程,直接进行解压安装,所以安装速度较源码包来说更快,由于不同平台的编译出来的包无法通用,所以在发布时,需事先编译好多个平台的包。

Egg格式与Wheel格式的区别:Egg 格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012 年定义。Wheel 的出现是为了替代 Egg,它的本质是一个zip包,现在被认为是 Python 的二进制包的标准格式。

2. 操作流程
2.1 创建setup.py文件
——setup.py是包分发与安装的指导文件。

首先,在待打包的库同级目录下创建一个setup.py文件,如下:

|--library
    |--xx.py
    |--xx.py
|--setup.py
|--README.md
然后,编写setup.py文件,如下:

# from distutils.core import setup
from setuptools import setup, find_packages

with open("README.md", 'r') as fh:
    long_description = fh.read()
    
setup(
    name="library name", # A string specifying the name of the package.
    version="0.0.1",  # A string specifying the version number of the package.
    author="author name",  # A string specifying the author of the package. 
    author_email="author@example.com",  # A string specifying the email address of the package author.
    # maintainer="maintainer name",  # A string specifying the name of the current maintainer
    # maintainer_email="maintainer@example.com", # A string specifying the email address of the current maintainer
    description="A small example library",  # A string describing the package in a single line.
    long_description=long_description,  # A string providing a longer description of the package.
    long_description_content_type="text/markdown",  # A string specifying the content type is used for the long_description
    url="https://github.com/xxx",  # A string specifying the URL for the package homepage.
    # download_url="xxx.xxx",  # A string specifying the URL to download the package.
    packages=find_packages(),  # A list of strings specifying the packages (dictories generally including __init__.py) that setuptools will manipulate.
    classifiers=[
        "Development Status :: 3 - Alpha",  # 3 - Alpha, 4 - Beta, 5 - Production/Stable
        
        "Topic :: Software Development :: Build Tools",
        
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.7",
        # "Programming Language :: Python :: 3.8",
        
        "License :: OSI Approved :: MIT License",
        
        "Operating System :: OS Independent",
    ],  # A list of strings describing the categories for the package.
    python_requires='>=3',  # A string corresponding to a version specifier for the Python version.
    py_modules=['xx/inference']  # A list of strings specifying the modules that setuptools will manipulate.
    # install_requires = ['argparse', 'cv2']  # A string or list of strings specifying what other distributions need to be installed when this one is. (即安装此库时,自动会安装install_requires指定的库)
)

更详细的参数说明见keywords。

PS: setuptools.find_packages函数说明:

# find_packages函数默认在与 setup.py 文件同一目录下搜索各个含有 __init__.py 的目录做为要添加的包。
find_packages(where='.', exclude=(), include=('*',))
# where指定在哪个目录下搜索包,exclude指定搜索要排除哪些包,include指出搜索要包含的包。
PS: 当然还有另一种编写setup.py文件的方式,即先编写setup.cfg文件,然后通过pbr等解析工具,详见此。

2.2 构建分发包
通过setup.py的一些内置命令,即可构建分发包:

python setup.py command1 command2 ... 
常用commands如下:

install: 在本地将包安装到系统环境中。
develop: 此命令不会真正安装包,而是在系统环境中创建一个软链接指向包实际所在目录,这样在修改包之后不用再安装就能生效,便于调试。
build: 构建安装时所需的所有内容。
sdist: 构建源码分发包,在Windows下为zip格式,在Linux下为tar.gz格式。执行 sdist 命令时,默认会被打包的文件:
所有 py_modules 或 packages 指定的源码文件
所有 ext_modules 指定的文件
所有 package_data 或 data_files 指定的文件
所有 scripts 指定的脚本文件
README、README.txt、setup.py 和 setup.cfg文件
bdist: 构建二进制分发包。
bdist_egg: 构建二进制 egg 分发包,经常用来替代基于 bdist 生成的模式。
bdist_wheel:构建二进制 wheel 分发包,whl 包是新的标准,用于替代过时的egg包。
bdist_wininst: 构建Windows中使用的exe二进制软件包,双击即可安装。
bdist_rpm: 构建linux中使用的rpm软件包。
一个构建源码分发包和二进制分发包的小例子,构建好的分发包会自动存储在dist文件夹下:

python setup.py sdist bdist_wheel
|--build
    |--xxx
|--dist
    |--{library}-{version}.tar.gz
    |--{library}-{version}-py{py_version}-none-any.whl
|--library
    |--xx.py
    |--xx.py
|--library.egg-info
    |--xxx
|--setup.py
|--README.md
2.3 发布(上传)包到PyPI
在构建好分发包后,就可以将分发包上传发布到PyPI中,这样就可以作为一个开源库通过pip install的方式安装使用了。

注意:在上传到PyPI之前,需要在PyPI上注册账号。在实际上传到PyPI前,也可以先尝试上传到TestPyPI做测试,TestPyPI是PyPI的一个单独实例,它允许在不影响实际索引的情况下测试分发工具和进程,TestPyPI一样需要注册账号。注册好后,可以配置一个. p y p i r c .pypirc.pypirc文件,此文件包含了PyPI访问地址和账号等信息,大致内容如下:

[distutils]
index-servers = 
    pypi
    testpypi

[pypi]
repository = https://pypi.org/
username:xxx
password:xxx

[testpypi]
repository = https://test.pypi.org/
username:xxx
password:xxx
方法一:

(1)首先注册项目信息,执行完下方命令之后即可在PyPI中看到项目信息。

python setup.py register
(2)上传源码包,之后才可通过pip install下载安装。

python setup.py upload
# python setup.py sdist bdist_wheel upload # 同时上传两种分发包

此方法不太推荐。安全性跟可测试性差,只有在构建系统、Python版本和底层操作系统配置都正确的情况下,才能正确且安全地工作。而且,此命令需在构建源码包等命令后最后一步调用,也就是说不能再上传之前测试包。

方法二:(推荐使用)

方法二是通过python的twine库,它是一个专门用于与PyPI交互的工具,其目标就是通过改进安全性和可测试性来改进PyPI交互,其余详细介绍见此。

具体使用(在构建分发包后):

上传到TestPyPI
twine upload -r testpypi dist/*
上传到PyPI
twine upload dist/*
通过简单的一行代码即可将自己的包发布上传到PyPI/TestPyPI中了(执行代码后,会要求操作者输入PyPI/TestPyPI的账户密码进行上传,twine也会自动在home目录下查找.pypirc文件获取账号信息,也可以通过–config-file选项指定文件路径)。

PS:twine check dist/* \text{twine check dist/*}twine check dist/*命令可以检查用户发行版的长描述是否能在PyPI上正确呈现。

参考文献
https://zhuanlan.zhihu.com/p/276461821
https://blog.konghy.cn/2018/04/29/setup-dot-py/
https://setuptools.readthedocs.io/en/latest/index.html
https://twine.readthedocs.io/en/latest/
https://packaging.python.org/specifications/pypirc/
————————————————

python项目 以docker形式打包部署全流程 在很久很久以前,我已经听过Docker的大名,当时服务着急上线虽然考虑过用Docker来部署我的服务,但是因为赶期的原因放弃了。这两天因为华为云服务器到期,而且阿里云服务器优惠力度特别大的原因,我要把华为云服务器里的工程迁移到阿里云。迁移的过程中,大量的时间精力浪费在了重装python,加载依赖,迁移项目,配置端口等环境配置的工作上。我在想,如果当时用了Docker部署,我至于受这气?于是,一不做二不休,就花了点时间把部署以docker的形式部署了。 阅读详情

相关推荐

chatgpt赋能python:Python打包部署指南:实现简化的应用部署工作

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

atest166的博客 361

(备忘)Pyinstaller的使用方法

打包Python代码生成exe程序的方法 pyinstaller main.py PyInstaller 支持的常用选项 -h,--help 查看该模块的帮助信息 -F,-onefile 产生单个的可执行文件 -D,--onedir 产生一个目录(包含多个文件)作为可执行程序 -a,--ascii 不包含 Unicode 字符集支持 -d,--debug 产生 debug 版本的可执行文件 -w,--windowed,--noconsolc

hp150119的博客 1390

Pyinstaller打包Python程序全指南:从基础到高级优化

Python程序打包是将脚本转换为独立可执行文件的关键技术,Pyinstaller作为主流打包工具,通过封装Python解释器和依赖库实现跨平台分发。其核心原理是分析import依赖关系并构建自包含的应用程序包,解决了环境配置和代码保护的工程难题。在数据分析工具、GUI应用和企业级系统部署等场景中,Pyinstaller能显著降低交付复杂度。针对打包体积优化,可采用UPX压缩和模块排除等技术;在代码安全方面,结合Cython编译和商业加壳工具可提升反编译成本。本文以Pyinstaller 4.10为例,详解

weixin_33841503的博客 664

Python项目如何打包?

Python项目如何打包?

zdh13370188237的博客 2089

Python脚本打包实战:PyInstaller原理、配置与疑难排查指南

在软件开发中,打包与分发是将代码成果交付给终端用户的关键环节。其核心原理在于通过静态依赖分析和资源收集,将脚本、依赖库及运行时环境封装为独立可执行文件,实现跨平台部署。这一技术显著提升了软件的可移植性和用户体验,尤其适用于数据分析工具、桌面应用及原型演示等场景。PyInstaller作为当前社区主流的打包工具,以其简洁的命令行操作和跨平台支持,成为Python项目从开发走向分发的重要桥梁。通过理解其依赖分析机制并掌握数据文件处理、隐藏导入等高级配置,开发者能有效解决动态导入和复杂依赖带来的打包难题,最终将P

weixin_30352191的博客 361

python程序打包成win的exe应用(以OCR应用为例)

先用一个简单的图片识别程序来走通打包流程。python中的打包专属工具是pyinstaller,在上篇文章中搭建的虚拟环境(cnocr_env)中安装因为部署好cnocr的python环境之后,训练好的模型ch_PP-OCRv5_det_infer.onnx是在线自动下载,而客户的电脑没有部署Python环境,或者是在内网,所以我们需要把模型文件目录一起打包。

ocy的博客 991

Python打包(构建)、分发、安装 简要介绍

python打包(构建)、发布、安装简要介绍,如果错误还请指出

weixin_44343319的博客 1847

PyInstaller打包Python脚本:从原理到实战的完整指南

在软件开发与分发过程中,将脚本转换为独立可执行文件是一项常见需求,这涉及到程序打包的核心概念。其基本原理是通过分析代码依赖,将解释器、库文件及资源封装,生成可在目标环境直接运行的程序包。这项技术的核心价值在于解决了环境依赖问题,极大提升了程序的便携性和交付效率,广泛应用于数据分析工具、桌面应用、内部工具及商业软件产品化等场景。本文以PyInstaller这一经典工具为例,深入剖析其引导程序(Bootloader)机制与版本兼容性设计,并针对单文件与目录模式的选择、资源路径处理等工程实践中的常见问题,提供了一

weixin_31083901的博客 280

python打包dll

模型打包就是把程序化的模块打包成一个能在指定平台上可执行文件。Pytorch中的打包和调用方法:torch.save()模型部署就是将打包好的文件在指定的平台上进行部署实施,使其能够正常使用。

2301_79605567的博客 1916

C# OpenVINO实现YOLOv8实例分割模型部署与打包

实例分割是计算机视觉的基础任务,在工业质检、安防等场景应用广泛。YOLOv8作为主流目标检测模型,其分割版本可输出像素级轮廓,但模型从Python环境迁移到Windows桌面应用时,时常遇到依赖复杂、部署门槛高的问题。OpenVINO作为Intel推出的推理加速框架,支持ONNX模型在CPU等设备上高效运行,C#语言则适合构建Windows桌面程序。三者结合,可将YOLOv8分割模型封装为无需Python环境、双击即用的exe工具。围绕模型导出、C#推理实现、输出张量解码及打包分发等关键环节,完整梳理部署链

weixin_29039773的博客 238

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3739

SOONet模型安装包制作:将模型服务打包为可分发的一键安装程序

本文介绍了如何将SOONet模型服务打包为可分发的一键安装程序,以降低部署门槛。借助星图GPU平台,用户可以自动化部署“SOONet: 基于自然语言输入的长视频片段时序定位模型”镜像,快速搭建服务环境。该模型的核心应用场景是,通过自然语言描述,在海量长视频中精准定位并提取出相关的特定片段,极大提升视频内容检索与分析的效率。

weixin_42600407的博客 101

基于UCD3138的数字控制硬开关全桥DC-DC电源设计实战解析

在开关电源设计中,数字控制技术正逐步取代传统模拟方案,以其卓越的灵活性、可编程性和强大的数据处理能力,成为应对复杂动态响应与智能化需求的关键。其核心原理在于通过高精度模数转换器(ADC)实时采样电压、电流信号,经由数字信号处理器(如ARM内核)运行PID等控制算法,动态调整数字脉宽调制(DPWM)输出,从而实现对功率级的精确控制。这种技术价值体现在能够轻松实现高级算法(如输入电压前馈、非线性补偿)、灵活配置保护参数,并通过PMBus等接口实现智能化监控与管理。其典型应用场景包括通信基站、服务器电源以及工业设

1311

SOONet模型安装包制作:将模型与环境打包成可分发的一键安装程序

本文介绍了如何在星图GPU平台上自动化部署SOONet镜像,实现基于自然语言输入的长视频片段时序定位。该方案将模型与环境打包,简化了部署流程,用户可快速搭建应用,典型场景如从长视频中精准定位并剪辑出符合文本描述的关键片段,提升视频内容处理效率。

weixin_29317963的博客 83

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 516

文献阅读笔记:量子微波测量技术综述

量子微波测量技术研究进展:量子微波测量技术利用里德堡原子与微波电场的相干相互作用,突破了传统测量方法的物理限制。该技术基于电磁诱导透明效应和里德堡原子能级跃迁原理,通过激光激发原子并监测光谱变化来测量微波电场强度。相比传统方法,量子微波测量具有超高灵敏度(理论极限可达nV/cm)、宽动态范围(超过100dB)、小型化等显著优势,且测量结果可直接溯源至普朗克常数。典型实验系统包括光源、原子气室和探测器,采用光谱法、干涉法等多种测量方法。近年来,该技术在基础研究和应用方面取得重要进展,展现出在通信、雷达、计量等

Grow into a more wonderful you 987

Inno Setup保姆级教程:从零开始打包Python程序为Windows安装包(含环境变量配置)

本文提供Inno Setup保姆级教程,指导开发者将Python程序打包为专业的Windows安装包。教程涵盖从基础脚本编写到高级配置,详细讲解如何利用Inno Setup向导安装程序处理文件依赖、创建快捷方式,并重点解决Python应用分发中的环境变量配置(如为FFmpeg添加系统PATH)等核心问题,实现一键式专业部署。

star的博客 567

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 924

GLM-OCR部署案例:离线环境无网络部署——模型/依赖/脚本全离线打包方案

本文介绍了GLM-OCR镜像在星图GPU平台上的自动化部署方案。该方案提供了一套完整的离线打包方法,包含模型、依赖与脚本,解决了无网络环境下的部署难题。用户通过该镜像可快速搭建OCR服务,典型应用于金融、政务等安全隔离环境下的合同、票据等文档的自动化识别与处理。

weixin_34945060的博客 991

课堂练习及课后作业2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?本关任务:修改版本 0 内核,使得每发生 100 次时钟中断,就在屏幕上输出一个字符‘t’和当时的进程号,如“t(0)”表示0号进程运行时发生了时钟中断。本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?本关任务:修改版本 1 内核源码,使得每次时钟中断发生时,都在屏幕上输出字符‘t’。分析版本1内核,找到第一次时钟中断的恢复点地址。

Junds0的博客 1万+

Trae IDE项目开发全流程深度技巧与最佳实践

2026年AI开发新范式:Trae AI IDE深度解析 摘要 2026年,AI已成为软件开发的核心驱动力。字节跳动推出的AI原生IDE——Trae,从根本上重塑了开发体验,将AI作为第一公民而非附加功能。Trae通过深度集成大型语言模型和创新交互模式,解决了现代开发中的重复劳动、信息过载等核心痛点。 报告全面剖析了Trae的核心功能: 智能代码生成:支持上下文感知续写、自然语言驱动生成和多模态输入转换 对话式AI助手:提供侧边栏和行内对话模式,支持代码解释、Bug修复、重构建议等 Builder/SOLO

公众号:AI前沿侦探 159

Python程序商业化实战:5种EXE打包方案对比

最近在做一个Python项目商业化落地的需求,客户要求必须打包成独立的exe文件分发。为了找到最优解决方案,我花了三天时间系统测试了主流的Python打包工具,总结出一套实用的对比方法论。最惊喜的是它的AI辅助功能,帮我快速解决了几个打包参数配置的难题。为了控制变量,所有打包测试都在同一台Windows 10电脑上进行,Python版本固定为3.8。这次测试让我意识到,没有完美的打包方案,关键要根据项目特点选择。比如我的商业项目最终选择了PyInstaller,虽然体积大些,但用户反馈启动速度确实很流畅。

ThunderstormLynx23的博客 983

【QGIS】软件下载安装及GIS4WRF插件使用

【QGIS】软件下载安装及GIS4WRF插件使用

WW、forever的博客 1799

Python应用部署终极指南:PyOxidizer深度解析与技术哲学

PyOxidizer是一款革命性的Python应用打包与分发工具,它彻底改变了Python应用程序的部署方式。通过将Python解释器、所有依赖库和应用程序代码静态链接到单个可执行文件中,PyOxidizer让Python应用的分发变得前所未有的简单。无论您是Python新手还是资深开发者,这个现代打包工具都能显著简化您的部署流程,让您专注于应用开发而非复杂的打包问题。😊 ## 🔥 为什么选

gitblog_00288的博客 700

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python程序打包工具选型与实战指南

Python打包是将代码、依赖和解释器封装为独立程序包的技术,其核心原理是通过静态分析和资源嵌入实现跨环境运行。在工程实践中,打包技术能有效解决代码交付、环境配置和知识产权保护等问题,特别适用于金融分析工具、自动化脚本等场景。主流工具如PyInstaller通过依赖扫描和字节码处理实现基础打包,而Nuitka则采用编译为C的方式提升性能。针对企业级需求,还需考虑代码签名、安全加固等方案,同时结合UPX压缩、延迟加载等技术优化程序体积与启动速度。

weixin_33853794的博客 414

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Pyinstaller打包详细教程
下一篇: 基于python ttkbootstarp的密钥生成器
shadow_zed
博客等级 码龄10年 6289粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值