Python实现项目打包部署Linux服务器运行方式

 更新时间:2026年04月28日 16:59:46   作者:徐哥在线  
文章主要介绍了Python项目的打包和部署,包括使用buildout打包和docker容器化部署,打包可生成exe文件或安装包,部署可直接部署或使用docker,文中详细介绍了每个步骤的实现方法和相关命令

前言

一个Python项目的完成后需要发布,这就涉及到打包和部署。项目可打包成可执行的exe程序,或者打包成可通过命令安装启动的安装包。其中打包成可执行文件工具用的最多的是pyinstaller,该工具支持windows和linux。

而打包成安装包可以是setuptools来安装,或者使用buildout进行构建。

而部署可以是直接部署,也可以是docker容器化部署,相比直接部署docker部署方式会省去一堆环境的配置,且轻量,启动快。

文章主要以buildout打包方式,和docker部署方式来实践

一、项目打包

1.1.项目结构

这里的案例是一个简单的python的web项目,先来看下项目的包文件结构

alone-server/
├── common
│  ├── conf.txt
│  ├── config.py
│  ├── logger.py
│  ├── md5.py
│  └── mysql_connector.py
├── logs
└── app.py

1.2.本地打包Python项目依赖

在idea中的项目根目录打开Terminal,执行以下命令(前提已经配置好python环境),会在根目录下生成requirements.txt依赖文件

pip freeze > requirements.txt

二、发布Linux上

2.1.部署方式

2.1.1.直接部署

文章主要介绍docker方式部署,所以直接部署方式这里就简单概括下主要步骤

1.服务器上安装配置好python相关环境(这里就不展开了,可以参考网上方式)

2.压缩项目源码为zip包,使用xshell+xftp方式上传到服务器

3.服务器上解压缩包,cd进项目根目录,执行以下命令安装依赖,执行命令可以看到正在下载文件中的各个依赖,需要一定时间

pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt

4.运行项目启动文件,执行以下命令,执行项目入口文件,我这里的入口文件为app.py,启动后就部署成功了,web可以进行访问了

python app.py 

2.1.2.Docker部署

docker容器化部署需要一些准备工作,如服务器安装Docker,项目配置Dockerfile文件等

2.1.2.1.Linux安装Docker

这里使用的是CentOS7系统。在系统中安装Docker可以安装系统中CentOS-Rxtras库中已自带有Docker(但不是最新版本,版本为1.13),也可以安装指定版本,或者安装最新的版本,由于前期自己测试中发现自带得到Docker版本过低会带来一定问题,后期为了处理还作升级比较麻烦,所以采用的是指定版本安装。

以下是三种安装方式:

方式1:使用CentOS-Rxtras库中已自带有Docker直接安装

yum install docker

方式2:安装最新版本

(1)安装基础工具

yum -y install yum-utils device-mapper-persistent-data lvm2

(2)配置yum镜像库

yum-config-manager --add-repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)安装最新版本

yum install docker-ce

方式3:指定版本安装

(1)安装基础工具

yum -y install yum-utils device-mapper-persistent-data lvm2

(2)配置yum镜像库

yum-config-manager --add-repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)查看可安装版本信息

yum makecache fast
yum list docker-ce.x86_64 --showduplicates | sort -r

(4)安装指定版本

yum install docker-ce-19.03.13 -y

上述安装后,查看版本信息确认安装成功,并设置开机自启动

docker -v
systemctl start docker
systemctl enable docker
2.1.2.2.创建Dockerfile

一个docker容器的运行基础是镜像,实际上镜像就是代码与运行环境打包生成的。

docker创建镜像有三种方式,分别是基于已有容器创建、基于本地模板创建、dockerfIile创建,这里就不一一赘述每种方式了,我采用的是dockerfile创建方式。

在项目根目录创建Dockerfile,编写执行脚本

# 设置基础镜像
FROM python:3.7
# 设置代码文件夹工作目录 /app
WORKDIR /app
# 复制当前代码文件到容器中 /app
ADD . /app
# 设置时间
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装所需的包,这里的requirements文件名需和项目生成的一致
RUN pip install --trusted-host mirrors.tuna.tsinghua.edu.cn -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
# 执行入口文件
CMD ["python", "app.py"]

2.1.2.3.压缩打包上传

(1)本地压缩打包后缀名为.zip包

(2)上传服务器

使用xhell+xftp(或其他工具)将包上传到指定目录

(3)解压缩

cd 进入文件上传路径,执行解压缩命令,unzip 包名。

这里需要系统已经安装了unzip,如未安装会出现-bash: unzip: command not found的错误,只要执行命令: yum install -y unzip zip 进行安装就可以了

unzip alone-server.zip
2.1.2.4.生成镜像

cd进项目根目录,app.py启动文件需要同Dockerfile放置在同一目录下,执行以下命令生成镜像,注意命令后的 ‘.’ 符号指的是在当前目录下执行创建,不要遗漏了该符号。创建会去执行下载基础镜像和各个依赖,需要等待一定时间。

docker build -t 镜像名称 .

2.1.2.5.启动容器

在我的项目中启动的端口是5002,在启动容器时候把该端口映射到9001,这样我们就可以通过该端口访问项目了

docker run --name 容器名称 -d -p 9001:5002 镜像名称

通过ip和端口访问测试的接口,成功返回

另外,还可以通过以下几个命令保存镜像或者导入镜像,进入容器,退出容器等

docker save 容器id > 路径文件名

导入本地镜像

docker load -i 文件名.tar

进入容器

docker exec -it 容器名 /bin/bash

退出容器

exit

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用Python的Turtle制作自己的星空

    用Python的Turtle制作自己的星空

    这篇文章主要介绍了用Python的Turtle制作自己的星空,本文用了turtle绘图包,是一款非常强大的内置包,需要的朋友可以参考下
    2023-04-04
  • Python实现设置PDF文档的标准和自定义属性

    Python实现设置PDF文档的标准和自定义属性

    在处理 PDF 文件时,除了关注文件内容本身,文档的属性信息同样不可忽视,本文将介绍如何使用 Python 设置 PDF 文档的标准和自定义属性,感兴趣的小伙伴可以了解下
    2026-03-03
  • python实现杨辉三角思路

    python实现杨辉三角思路

    本文给大家分享的是作者使用python实现杨辉三角的思路,非常的实用,有需要的小伙伴可以参考下
    2017-07-07
  • python 随机数使用方法,推导以及字符串,双色球小程序实例

    python 随机数使用方法,推导以及字符串,双色球小程序实例

    下面小编就为大家带来一篇python 随机数使用方法,推导以及字符串,双色球小程序实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • python求列表交集的方法汇总

    python求列表交集的方法汇总

    这篇文章主要介绍了python求列表交集的方法,实例汇总了三个常用的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • Python如何调用JS文件中的函数

    Python如何调用JS文件中的函数

    这篇文章主要介绍了Python如何调用JS文件中的函数的相关知识点总结,有兴趣的朋友们跟着学习下。
    2019-08-08
  • Python+Seaborn绘制分布图的示例详解

    Python+Seaborn绘制分布图的示例详解

    这篇文章我们将介绍10个示例,从而帮助大家掌握如何使用Python中的Seaborn库来创建图表。文中示例代码讲解详细,感兴趣的可以了解一下
    2022-05-05
  • django 利用Q对象与F对象进行查询的实现

    django 利用Q对象与F对象进行查询的实现

    这篇文章主要介绍了django 利用Q对象与F对象进行查询的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python不支持i++运算原理实例解析

    python不支持i++运算原理实例解析

    这篇文章主要为大家介绍了python不支持 i++运算原理实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • Python实现字符串模糊匹配方式

    Python实现字符串模糊匹配方式

    这篇文章主要介绍了Python实现字符串模糊匹配方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论