常用的Python打包管理工具简介

Python提供了多种工具和库,用于将Python代码打包成可执行文件或库,以便在没有安装Python的环境中运行,或者方便地分发和管理。
以下是一些常用的Python打包管理工具:

PyInstaller:

PyInstaller是一个在多个平台上(包括Windows、GNU/Linux、macOS等)将Python程序打包成独立可执行文件的工具。它特别适用于将Python脚本冻结为独立的应用程序,以便在没有安装Python的环境中执行。PyInstaller的主要优点包括支持多平台、构建小尺寸的可执行文件,以及确保兼容性。Pyinstaller打包工具使用说明在另外一篇文章已经讲解。PyInstaller适合将Python程序打包成独立的可执行文件,便于在没有Python环境的计算机上运行。

Docker

则提供了一个更高级别的抽象,用于构建、部署和管理整个应用程序的运行环境,确保应用程序在不同环境中的一致性和可移植性。使用Docker部署python程序流程

setuptools:

setuptools是Python生态系统中用于创建和管理软件包的工具。它提供了一套标准流程,帮助将源代码、依赖项、文档等打包成符合Python打包规范的格式,如wheel或tar.gz格式。setuptools还支持生成易于安装的脚本,使用户能够通过一条简单的命令在自己的环境中安装模块。
setuptools和setup.py文件主要用于定义项目的元数据、依赖关系,并通过pip进行分发。尽管PEP 518引入了pyproject.toml文件的使用,但setuptools和setup.py在打包Python项目时仍然被广泛使用。
这些工具各有特点,适用于不同的需求。例如,如果你需要将Python代码打包成可在没有Python的环境中运行的独立应用程序,PyInstaller是一个不错的选择。如果你需要将你的模块或库打包并分发给其他开发者使用,那么setuptools可能更适合。
setuptools提供的主要的功能有:

python库的打包分发(本章主讲)
依赖包安装与版本管理
python环境限制
生成脚本
c/c++ 拓展

本章主要讲解setuptools

在Python开发中,我们经常需要将自己的代码打包成可供其他人使用的库或应用程序。为了方便用户安装和使用,我们需要创建一个配置文件 setup.py,用于定义打包的相关信息和依赖项。本文将详细介绍如何编写 setup.py 文件,并展示每一步需要做什么。


#安装最新版的setuptools和wheel
python3 -m pip install --user --upgrade setuptools wheel
#构建安装时所需的所有内容:
python setup.py build
#使用sdist构建格式的源码分发包
python setup.py sdist 
#在windows中我们习惯了双击 exe 进行软件的安装,Python 模块的安装也同样支持 打包成 exe 这样的二进制软件包。
python setup.py bdist wininst
#而在 Linux 中,大家也习惯了使用 rpm 来安装包,对此你可以使用这条命令实现 rpm 包的构建
python setup.py bdist rpm
#若你喜欢使用 easy_instal 或者 pip 来安装离线包。你可以将其打包成 egg 包
python setup.py bdist egg
#若你的项目,需要安装多个平台下,既有 Windows 也有 Linux,按照上面的方法,多种格式我们要执行多次命令为了方便,你可以一步到位,执行如下这条命令,即可生成多个格式的进制包
python setup.py bdist

#使用sdist构建格式whl的源码分发包
python setup.py sdist bdist_wheel
#只不过创建的文件类型是 tar.gz,文件名为 应用名-版本号.tar.gz。也是保存在 dist 文件夹下
python setup.py sdist --formats=gztar


#下面的安装命令会将当前的 Python 应用安装到当前Python 环境的 site-packages 目录下,这样其他程序就可以像导入标准库一样已入该应田的代码
python setup.py install
#如果应用在开发过程中会频繁变更,每次安装还需要先将原来的版本卸掉,这样就会很麻烦。如果使用 develop 开发方式安装的话,应用代码不会真的被拷贝到本地 Python 环境的 site-packages 目录下,而是在 site-packages 日录里创建一个指向当前应用位置的链接。这样如果当前位置的源码被改动,就会马上反映到 site-packages 里。
python setup.py develop
#或者也可以使用命令
pip install -e .


setup.py是一个 python 文件,它的存在表明您要安装的模块/包可能已经用 Setuptools 打包和分发,这是分发 Python 模块的标准。 它的目的是正确安装软件。
setuptools是python自带的用来构建包的工具,构建出来的wheel(.whl)可供其他人pip install和import。
简单的setup.py程序

from setuptools import setup, find_packages
setup(
    name='helloworld',
    version='1.9',
    description='setup tools dome',
    author='hauye6018',
    author_email='1063065477.@qq.com',
    # packages=['image_index_measures'],
    packages=find_packages(),
    license='MIT',
    long_description=open('README.md',encoding='utf-8').read(),
)

引入静态文件

如果想引入静态文件,如JS、CSS、图片等,怎么做?在项目根目录下添加一个"MANIFEST.in”文件夹。假设我们把,所有静态文件都放在"static”子目录下我们在清单文件”MANIFEST.in“中,列出想要在包内引入的目录路径

recursive-include myapp/static
recursive-include myapp/xxx*

recursive-include表明包含子日录。
在"setup.py"中将include_package data参数设为True:

#coding:utf8from setuptools import setup
setup(
name='MyApp#项目名version='1.0',#版本号
packages=['myapp’,
#包括在安装包内的Python包include package data=True
#启用清单文件MANIFEST.in

如果你想排除一部分文件,可以在“setup.py"中使用exclude_package date参数:

setup(
#```
include_package data=True,#启用清单文件
MANIFEST.inexclude package date={'':['.gitignore']})

以下参考文献:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容