【Python】如何在服务器上优雅的部署Python项目(Linux/Windows/Mac)

一.venv独立运行环境(虚拟环境)

一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境,Python可以在每个项目目录下创建各自的虚拟环境项目所依赖的包就在当前目录环境下,这样避免了库版本的冲突,也方便相同操作系统间可以快速的拷贝项目运行。

二.如何实现

  1. 创建目录,这里把venv命名为test101env,因此目录名为test101env:

    [root@robot-DOM-server test]# mkdir test101env
    [root@robot-DOM-server test]#  cd test101env/
    [root@robot-DOM-server test101env]#
    
  2. 第二步,创建一个独立的Python运行环境:

    [root@robot-DOM-server test101env]# python3 -m venv .
    

    查看当前目录,可以发现有几个文件夹和一个pyvenv.cfg文件:

    ls
    

    在这里插入图片描述

    • 命令python3 -m venv <目录>可以创建一个独立的Python运行环境

      • 观察bin目录的内容,里面有python3、pip3等可执行文件,实际上是链接到Python系统目录的软链接
        在这里插入图片描述
    • 继续进入bin目录Linux/Macsource activateWindowsactivate.bat激活该venv环境:

      source activate
      

      在这里插入图片描述

  • 注意到命令提示符变了,有个(test101env)前缀,表示当前环境是一个名为test101env的Python环境。
    在这里插入图片描述
  1. 正常安装各种第三方包,并运行python命令:

    在这里插入图片描述
    pip3 install jinja2

  2. 运行python命令

    (test101env) [root@localhost bin]# python3
    Python 3.6.8 (default, Nov 16 2020, 16:55:22) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import jinja2
    >>> exit()
    

    在这里插入图片描述

    • venv环境下,用pip安装的包都被安装到test101env这个环境下,具体目录是test101env/lib/python3.x /site-packages,因此,系统Python环境不受任何影响。也就是说,test101env环境是专门针对test101这个应用创建的。
  3. 退出当前的test101env环境,使用deactivate命令:

    deactivate
    
    • 此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。
      在这里插入图片描述

三.原理

venv是如何创建“独立”的Python运行环境的呢?

  • 原理很简单,就是把系统Python链接或复制一份到venv的环境,用命令source activate进入一个venv环境时,venv会修改相关环境变量,让命令python和pip均指向当前的venv环境

如果不再使用某个venv,如何删除?

  • 例如test101env,删除它也很简单。首先确认该venv没有处于“激活”状态,然后直接把整个目录test101env删掉就行

小结

  • venv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题

如何优雅的部署Python应用到Linux服务器?

四.在Linux服务器上简单部署一个Python项目

1.安装Python3环境

安装Python3环境

2.部署python应用

1. 将本地开发环境的依赖项目生成清单文件

  • 在项目所在目录执行命令:pip freeze > requirements.txt

  • 将当前项目使用的python解释器中的依赖包保存到requirements.txt 文件中

    • 清单文件将会生成在当前项目目录下,内容如下所示:
      在这里插入图片描述

2.将Python项目上传到服务器

3.为项目创建虚拟环境

  • 将项目拷贝至服务器上后,进入项目文件中,用命令:python -m venv env_name 创建虚拟环境
    • 其中env_name 为虚拟环境的名称
  • 启动创建的虚拟环境:通过命令 source 环境名称/bin/activate ,虚拟环境激活之后,对应的环境名会出现在命令行
  • 关闭虚拟环境的命令deactivate
    在这里插入图片描述

4.安装对应项目的依赖包

  • 虚拟环境启动之后,在虚拟环境中安装我们对应项目的依赖了,命令:
    pip3 install -r requirements.txt安装项目的依赖包(requirements.txt为项目收集的依赖包地址)

    • 执行下载requirements文件内依赖名命令
      在这里插入图片描述
    • 当前虚拟环境存放在已下载好的
      在这里插入图片描述
  • 如果对应的Linux环境中未配置国内镜像源,导致依赖包安装缓慢,可以通过命令
    pip install -i 国内镜像源地址 -r requirements.txt 安装项目依赖包

    • 如果没有requirements.txt,也可以直接使用命令: pip install 第三方库名 进行安装

5.运行主程序文件

  • 在虚拟环境可以直接通过命令:python xx.py 运行程序文件,但是该命令无法让主程序文件处于后台运行状态,一旦关闭会话页面,程序就会停止
  • 为了让程序能够在后台运行,可以使用命令:nohup python xx.py,该命令可以让程序文件处于后台运行 状态,并且能够将运行日志收集到nohup.out文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/344943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【idea插件开发】idea插件访问浏览器web地址

背景 以往在eclipse上面开发插件&#xff0c;有兴致想尝试Idea上玩一下插件开发。想要在idea上面访问web地址 概要 记录在idea上面访问web地址 正文 1、点击File->New->Project… 选择IntelliJ Platform Plugin 2、点击下一步后&#xff0c;输入Project Name&#…

jenkins安装配置,使用Docker发布maven项目全过程记录(1)

使用的CentOS8 系统&#xff0c;其它Linux系统类似 1、jenkins安装 1.1、配置JAVA环境 使用的服务器环境中&#xff0c;安装了Java1.8与Java17&#xff0c;当前jenkins的最低java版本要求java11。系统默认使用的是java1.8&#xff0c;因此需要切换环境。 alternatives --co…

认识与探索大模型时代的RPA应用及进化(上)

AI Agent当前仍然处于技术爬坡与实验阶段&#xff0c;特别是在企业领域&#xff0c;真正的成熟应用还处于广泛探索与原型验证阶段&#xff0c;离成熟还尚待时日。而同时另外一种在最近几年广受欢迎的自动化解决方案-RPA&#xff08;机器人流程自动化&#xff09;也在LLM时代不断…

哪些方法能将静图变动图?这一个网站帮你解决

怎么将静态图片变成gif动图&#xff1f;我们经常能看到各种网络平台都能看到各种把静图制作成gif动图的软件&#xff0c;觉得非常的有意思。但是这种软件大部分都是需要下载或者操作起来很麻烦。那么&#xff0c;有没有什么简单容易操作的在线图片合成&#xff08;https://www.…

Java调用C++的DLL设计!!!解耦实用!!!

问题背景&#xff1a;Java调用C&#xff0c;通常推荐用JNI&#xff08;Java Native Interface&#xff09;http://t.csdnimg.cn/kjOND 但是调用时每调用一个C方法都需要在Java程序中增加&#xff0c;不符合设计时的开放封闭原则&#xff0c;业务一边程序就要修改 public clas…

基于springboot+vue的社区医院信息平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

计算机毕业设计 | SpringBoot+vue 社区老人健康管理系统(附源码)

1&#xff0c;绪论 对于目前的中国来讲&#xff0c;人口老龄化日益严重&#xff0c;目前最新统计数据表明&#xff0c;60岁以上老人所占的人口比例已达到接近20%。这给我们国家带来了严重的养老压力&#xff0c;同时也严重削弱了我们人力大国的人力优势。对于这些老年人来讲&a…

Github 不能访问,提示:port 22: Connection timed out

问题描述 github clone 代码出现错误&#xff1a; $ git clone gitgithub.com:Atlan4/Fnirsi1013D.git Cloning into Fnirsi1013D... ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository.Please make sure you ha…

2024最新防泄密软件推荐,防泄密软件有哪些功能

今天公司发生一件大事&#xff1a; 竟然会发生泄密事件&#xff01;&#xff01;&#xff01; 针对这种事情&#xff0c;作为企业管理者&#xff0c;需要提高警惕&#xff0c;不但要解决好已经发生的事&#xff0c;平时也要做好预防工作。 如何做好企业防泄密工作&#xff1f;…

Spring Security 之 表单登录

表单登录 Spring Security提供了支持通过HTML表单提供用户名和密码。本节详细介绍了Spring Security中表单身份验证的工作原理。 本节将介绍Spring Security中的基于表单的登录工作原理。首先,我们将看到用户如何被重定向到登录表单。 第1步,用户首先对其未经授权的资源(/…

【nowcoder】链表的回文结构

牛客题目链接 链表的回文结构 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {} };*/ #include <cstdlib> // 建议大伙自己对照我的代码画下图&#xff0c;假设A链表是&#xff1a;1 2 3 2 1 class PalindromeList { publi…

小程序系列--11.小程序自定义组件

一、组件的创建与引用 1. 创建组件 2. 引用组件 3. 局部引用组件 4. 全局引用组件 5. 全局引用 VS 局部引用 6. 组件和页面的区别 二、样式 1. 组件样式隔离 2. 组件样式隔离的注意点 3. 修改组件的样式隔离选项 4. styleIsolation 的可选值 三、数据、方法和属性 1…

初识“操作系统“(Operator System)

概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09; 其他程序&#xff08;例如函数库&#xff…

【教程】如何在苹果手机上查看系统文件?

​ 目录 引言 用户登录工具和连接设备 查看设备信息&#xff0c;电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同&#xff0c;无法直接访问系统文件…

webpack常用配置

1.webpack概念 ​ 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模块组合成一个或多个 …

Kruise Rollout 全链路灰度实践

作者&#xff1a;旦酱、十眠 什么是全链路灰度&#xff1f; 在发布应用的过程中&#xff0c;我们通常希望用少量特定流量来验证新版本的发布是否正常&#xff0c;以保障整体稳定性。这个过程被称为灰度发布。关于灰度发布&#xff0c;我们通过逐步增加发布的范围&#xff0c;…

如何快速解决局域网IP冲突问题?连接IP地址冲突如何用代理IP搞定?

随着互联网的普及&#xff0c;局域网已经成为了许多家庭和企业中不可或缺的一部分。然而&#xff0c;局域网中的IP地址冲突问题却时常困扰着用户。一旦出现IP地址冲突&#xff0c;网络连接就会变得不稳定&#xff0c;甚至无法正常上网。那么&#xff0c;如何快速解决局域网IP冲…

《Linux系列》Linux虚拟机,LVM逻辑卷扩容,xfs文件系统扩容

Linux虚拟机&#xff0c;LVM逻辑卷扩容&#xff0c;xfs文件系统扩容 1 虚拟机配置介绍 在创建虚拟机的时候只给了20G磁盘空间大小&#xff0c;但是现在需求变更&#xff0c;想要增加到40G磁盘空间大小&#xff0c;所以需要通过两步扩容磁盘空间。 系统版本是Centos7 根目录…

掼蛋功能之识别性格篇

常说&#xff1a;千人千面。大多数人一到牌局的场面&#xff0c;往往精神便会放松&#xff0c;面貌神情不再收敛&#xff0c;一言一行体现出的性格暴露无疑&#xff0c;具体表现为以下几种&#xff1a; 1、浮躁冲动型&#xff1a;此类人多数不讲究团队配合&#xff0c;自顾自出…

了解云工作负载保护:技术和最佳实践

云工作负载是指云环境中的应用程序或存储元素&#xff0c;无论是公共云、私有云还是混合云。每个云工作负载都使用云的资源&#xff0c;包括计算、网络和存储。 云工作负载可以多种多样&#xff0c;例如运行应用程序、数据库或托管网站。它们可以是静态的或动态的&#xff0c;…