首页 > 编程语言 >如何打包和分发 Python 应用程序

如何打包和分发 Python 应用程序

时间:2024-10-16 18:50:24浏览次数:3  
标签:__ 分发 Python py 应用程序 --

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

简介


所有使用包管理器(例如 pip)下载的 Python 库(即应用程序包)都是使用专门执行此任务的实用程序进行分发的。这些实用程序创建“Python 分发”,基本上是版本化(和压缩的)存档。所有与所分发内容相关的元素,例如源文件和资源文件,都包含在其中。

在这篇 DigitalOcean 文章中,我们将讨论分发所需的工具,并介绍关键步骤,以便您能够打包自己有用的库、模块或应用程序,这将有助于您在 droplet 上部署项目或在互联网上共享。

Python 分发和包


即使您只是稍微使用过 Python,您也会熟悉使用包管理器(例如 pip、easy_install)下载模块和库(例如应用程序开发框架),然后导入并用于创建新的模块。

这些本地操作的包管理工具连接到源(即 Python 包索引 - PyPI)并执行所需的操作(例如搜索和安装),因为它们处理实际称为 Python 分发的资源。

分发应用程序的方式包括使用一些必备文件(以及一些推荐的文件)包装其目录,指定相关元素(例如资源、依赖项等),然后发布或在其他地方使用它…就是这么简单。

注意: 强烈建议您使用虚拟环境来隔离您正在使用的 Python 下载、模块和应用程序。

Python 包


在 Python 中,包[技术上]是一个可导入的目录(带有 __init__.py),其中包含源文件(即模块)。这不应与操作系统包混淆,后者[技术上]是实际应用程序(即 Debian 包)。但必须注意的是,Python 分发也被称为包。

示例包结构:

package
  |
  |-- __init__.py

Python 应用程序


尽管从单个文件到散布在各种中的数百个文件都可以被认为是 Python 中的应用程序,但在大多数实际情况下,一个应用程序将由多个模块和一定数量的外部导入(从库)组成。

示例应用程序结构:

myapp
  |
  |-- __init__.py
  |-- amodule.py
  |-- anothermod.py
  |__ tests
  |     |
  |     |-- __init__.py
  |     |-- ..
  |     |-- .
  | ..

Python 分发工具和库


鉴于 Python 的普及性以及为其编写的丰富第三方库/应用程序的数量,一个更简单和统一的分发方式一直是必要的。已经有几种不同的工具和库用于创建 Python 分发。

为了处理分发任务,创建了 Python 分发实用工具集 distutils

Python 包索引(PyPI)


Python 包索引,或 PyPI,是项目(Python 分发)的中央[在线]存储库。诸如 pip 之类的包管理工具使用此存储库来托管、查找和安装它们。

入门


让我们从创建一个简单的通用 Python flask 应用程序[结构]开始,然后我们可以用它来打包。

创建应用程序结构


我们的目标是创建一个类似于大多数实际项目的示例。因此,最好想象一个具有模块化组件的场景。

示例结构:

/MyApplication
    |-- run.py
    |-- config.py
    |__ /app
         |-- __init__.py
         |-- /module_one
             |-- __init__.py
             |-- controllers.py
             |-- models.py                
         |__ /templates
             |-- module_one
                 |-- hello.html
         |__ /static
         |__ ..
         |__ .

创建文件夹:


mkdir ~/MyApplication
cd    ~/MyApplication
touch run.py
touch config.py
mkdir app
cd    app
touch __init__.py
mkdir templates
mkdir static
mkdir module_one
cd    module_one
touch __init__.py
touch controllers.py
touch models.py
cd    ../templates
mkdir module_one
cd    module_one
touch hello.html

使用 nano 编辑 run.py:


nano ~/MyApplication/run.py

放入以下内容:

# 运行测试服务器。
from app import app
app.run(debug=True)

使用 CTRL+X 保存并退出,然后确认选择 Y

使用 nano 编辑 config.py:


nano ~/MyApplication/config.py

放入以下内容:

DEBUG = True

THREADS_PER_PAGE = 4

CSRF_ENABLED     = True
CSRF_SESSION_KEY = "secret"

使用 CTRL+X 保存并退出,然后确认选择 Y

使用 nano 编辑 app/init.py 文件:

nano ~/MyApplication/app/__init__.py

将以下内容粘贴进去:

from flask import Flask, render_template

app = Flask(__name__)
app.config.from_object("config")

from app.module_one.controllers import module_one

app.register_blueprint(module_one)

按下 CTRL+X 保存并退出,确认选择 Y

使用 nano 编辑 app/module_one/controllers.py 文件:

nano app/module_one/controllers.py

将以下内容粘贴进去:

from flask import Blueprint, request, render_template

module_one = Blueprint("auth", __name__, url_prefix="/auth")

@module_one.route("/hello")
def hello():
    return render_template("module_one/hello.html")

按下 CTRL+X 保存并退出,确认选择 Y

使用 nano 编辑 app/templates/module_one/hello.html 文件:

nano app/templates/module_one/hello.html

将以下内容粘贴进去:

<pre>
    &lt!DOCTYPE html>
    &lthtml lang="en">
    &lthead>
        &lttitle>{% block title %}My Site{% endblock %}</title>
        {% block css %}
        {% endblock %}
        &ltmeta name="viewport" content="width=device-width, initial-scale=1.0">
      &lt/head>
    &ltbody>
    Hello, world!
    &lt/body>
    &lt/html>
</pre>

按下 CTRL+X 保存并退出,确认选择 Y

开始应用程序分发/打包


在创建了一个使用 Flask 的网站的示例应用程序结构之后,我们可以继续迈出准备分发的第一步。

修改文件夹结构


为了很好地打包我们的应用程序,我们需要对文件夹结构进行一些添加。

/MyApplication
    |-- run.py
    |__ /app
         |-- __init__.py
         |-- /module_one
             |-- __init__.py
             |-- controllers.py
             |-- models.py                
         |__ /templates
             |-- module_one
                 |-- hello.html
         |__ /static
         |__ ..
         |__ .
    |-- setup.py    # 分发设置文件
    |-- README.txt  # 读我文件
    |-- MANIFEST.in # 分发清单文件
    |-- CHANGES.txt # 变更日志

修改文件夹结构以创建必要的文件:

touch ~/MyApplication/setup.py
touch ~/MyApplication/README.py
touch ~/MyApplication/MANIFEST.py
touch ~/MyApplication/CHANGES.py
mv    ~/MyApplication/run.py ~/MyApplication/bin/run

创建 setup.py


nano ~/MyApplication/setup.py

将以下内容粘贴进去:

from distutils.core import setup

setup(
    # 应用程序名称:
    name="MyApplication",
    
    # 版本号(初始):
    version="0.1.0",
    
    # 应用程序作者详细信息:
    author="name surname",
    author_email="[email protected]",
    
    # 包
    packages=["app"],
    
    # 将额外文件包含到包中
    include_package_data=True,
    
    # 详细信息
    url="http://pypi.python.org/pypi/MyApplication_v010/",
    
    #
    # license="LICENSE.txt",
    description="Useful towel-related stuff.",
    
    # long_description=open("README.txt").read(),
    
    # 依赖包(分发)
    install_requires=[
        "flask",
    ],
)

按下 CTRL+X 保存并退出,确认选择 Y

创建 MANIFEST.in


如果需要包含额外的目录(例如 static 或 templates),需要在 清单 中明确声明它们以进行打包。我们将在 MANIFEST.in 中执行此操作。

nano ~/MyApplication/MANIFEST.in

将以下内容粘贴进去:

recursive-include app/templates *
recursive-include app/static *

按下 CTRL+X 保存并退出,确认选择 Y

这就是全部!您的 Python 分发包已准备好安装和分发。

附加文件


请记住,为了有一个完整的分发,您的文件/目录必须包含(并链接):

  • README.txt

  • MANIFEST.in

  • LICENSE.txt

使用分发就绪的应用程序


在完成了应用程序的创建并对文件结构进行必要的修改以准备进行无缝分发构建之后,我们可以开始进行打包操作。

如何创建分发文件


为了生成分发文件副本,请运行以下命令:

cd     ~/MyApplication
python setup.py sdist

此命令将通过您的设置,打印出正在执行的操作,并在新创建的 dist 目录中生成一个 tar 存档,类似于:

# root@hostname:~/MyApplication# ls dist
# MyApplication-0.1.0.tar.gz

注意: 由于我们没有填充所有子文件夹(例如 static)并且使用了额外文件(例如 README.txt),在创建过程中可能会看到一些警告。

如何安装应用程序


从现在开始,你的应用程序可以通过创建的 setup.py 文件进行安装和使用。

要安装应用程序,请运行以下命令:

python setup.py install

如果这个安装是为了开发目的,并且还需要安装依赖项,运行以下命令:

python setup.py develop

如何分享你的应用程序


如果你想在 Python 包索引上分享你的代码,可以按照以下步骤进行“注册”:

python setup.py register

你需要按照屏幕上的指示完成该过程。

如果你已经注册登录,只需上传代码,可以使用以下命令:

python setup.py sdist upload

如何创建应用程序新版本的软件包


  1. 使用文本编辑器(例如 nano)编辑 setup.py 文件,并设置新的版本号:version="0.1.1"

  2. 编辑 CHANGES.txt 以反映更改

  3. 对 LICENSE.txt 和 README.txt 进行必要的调整

  4. 按照上一步骤上传你的代码。

标签:__,分发,Python,py,应用程序,--
From: https://blog.csdn.net/rubys007/article/details/142964118

相关文章

  • python: pytest in thonny IDE
     classStudentData:""""""def__init__(self):self.__data=Nonedefconnect(self,datafile):withopen(datafile)asjsonfile:self.__data=json.load(jsonfile)defgetda......
  • jeecgboot 3.7.1 一键将生成好的代码复制到前后端项目目录,并执行SQL插入菜单的python
    importshutilimportosimportmysql.connectorfrommysql.connectorimportErrorbase_dir="D:/pro/JeecgBoot-v3.7.1"code_dir="/gendcode"package_name="meetrice"#MySQL连接配置config={'user':'root......
  • Python 赋值并运算
    bj="计应2151"#给bj进行赋值xm="玉"#给xm进行赋值xb="女"#给xb进行赋值xh=202102000798#给xh进行赋值a="班级"+bj+"姓名"+xm+"性别"+xb+"学号"+xh#合在一起,输出时可以......
  • OpenCV 简介与在 Python 和 C# 中的使用
    一、OpenCV概述(一)什么是OpenCVOpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的函数和工具,用于处理图像和视频数据。最初由英特尔公司开发,现在由一个开源社区维护和扩展。OpenCV支持多种操作系统,包括Windows、Linux和MacOS等,并且可......
  • 掌握 Python 剪贴板的超能力:Pyperclip 库全解析
    文章目录......
  • Python学习的自我理解和想法(13)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第13天,学的内容是模块入门以及pip引入,后面估计是一天一个模块。开学了,时间不多,写得不多,见谅。目录1.模块入门2.模块导入语法(1).import(2)form模块名import方法名或变量名(3)form模块名import*......
  • 深入探讨 Python 高级话题
    Python是一门灵活的高级编程语言,提供了许多独特的高级特性。这些特性不仅帮助开发者编写简洁、优雅的代码,还能提升代码的性能和可扩展性。在本篇博客中,我们将深入探讨一些高级话题,如元编程、动态类型、垃圾回收、内存管理、高性能计算等。11.1元编程与 type()元编程 是指......
  • 探索 Python 的测试与调试技巧
    测试和调试是开发软件时至关重要的步骤,它们可以确保代码的正确性、稳定性和性能。Python提供了强大的工具来简化测试和调试流程。在本篇博客中,我们将讨论Python中的单元测试、pytest 测试框架、调试与日志记录,以及性能优化与剖析工具的使用。10.1单元测试与 unittest单......
  • 探索 Python Web 开发:从框架到爬虫
    Python是Web开发中广泛使用的编程语言,因其简单、灵活和强大的生态系统,适合构建各种类型的Web应用和API。在本篇博客中,我们将讨论Web开发的几个重要主题,包括Flask和Django框架、API开发、HTTP请求处理以及网页爬虫的基础。9.1Flask框架基础Flask是一个轻量级......
  • Python学习的自我理解和想法(10)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第10天,学的内容是函数。开学了,时间不多,写得不多,见谅。目录1.函数入门2.函数使用说明1.定义函数2.函数组成3.函数命名4.函数参数5.函数易忘点6.函数的调用3.函数调用时的注意事项4.函数的参数(1......