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']})
以下参考文献: