关于Python3项目中依赖包管理问题

news2024/9/22 19:34:07

背景:最近在使用Python3.11编写脚本来获取google play中app的用户评论,脚本中需要安装多个依赖包,在本地Pycharm调试通过以后,上传到github,然后在linux服务器拉取脚本来运行,发现存在几个问题。本文将面临的问题记录下来,供自己学习,也希望其他人遇到类似问题以后,能作为一个参考。

问题1: 在本地依赖多个包,到服务器后需要手动依次多个依赖包吗?当然不是。

解决方法:

1. 在本地使用虚拟环境。在项目的根目录下执行python3 -m venv demo,其中demo为虚拟环境的名称,自己随便定义。

2. 然后执行pip3 freeze > requirements.txt,含义是用于生成一个包含当前 Python 环境中所有已安装包及其版本号的 requirements.txt 文件。

3. 执行souce demo/bin/activate 激活虚拟环境,再执行which python3,发现是虚拟环境下的Python解释器。这说明虚拟环境激活成功,或者看命令行最左面有(venv),也可以说明虚拟环境激活成功了。

4. 执行pip3 install -r requirements.txt 在虚拟环境安装所有的依赖包。上传代码到github

4. 登录服务器,来取代码。注意:服务器和本地开发环境Python版本要一致,避免出现兼容性问题。笔者本地和服务器使用的Python版本都是3.11版本

5. 拉取代码到服务器以后,发现会存在demo的一个虚拟环境目录,执行souce demo/bin/acitvate激活虚拟环境。到这里我以为自己不需要在服务器按照依赖包了。因为依赖包在本地都已经安装在venv/lib/python3.11/site-packages了。此时引出下面的第2个问题。

问题2:在服务器的虚拟环境下执行which python3 发现解释器还是服务器下的目录,不是虚拟环境下的解释器目录,执行python3 demo.py脚本,也提示依赖包没有安装。虚拟环境虽然激活了,但是解释器使用的并不是虚拟环境的。

原因:本地创建虚拟环境时,虚拟环境会包含一个独立的 Python 解释器及其相关的标准库。demo/bin/python3 会是一个指向实际 Python 解释器的符号链接,这个解释器是由 venv 创建时使用的 Python 版本。说白了,虚拟环境其实是使用的本地的/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11的解释器。而我服务器上根本没有这个目录以及对应pyhton3.11解释器,所以在服务器的虚拟环境下执行which python3还是我本地的Python解释器。

 解决方法:服务器下删除原有的虚拟环境,重新创建新的虚拟环境。

1. deactivate 退出虚拟环境,执行rm -rf demo/* 删除venv目录,

2. 执行python3 -m venv demo重新创建虚拟环境,source demo/bin/activate,激活环境。

3. pip3 install -r requirements.txt,重新安装所有依赖包

4.在执行which python3 ,发现解释器的目录是虚拟环境下的。

5. 执行ls -ltr demo/bin 查看python3的链接,连接到的服务器上的Python

6. python3 demo.py也可以成功执行脚本了。

注意:此时本地和服务器项目中的.gitignore文件中要加上/demo,不要把demo虚拟环境目录再提交到github仓库中去了,否则本地和服务器的虚拟环境目录存在冲突。保证不提交到仓库中去,这样就保证了本地和服务器使用各自的解释器。拉取代码也不会覆盖彼此的demo目录。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(三)

目录 1 -> WebAPI背景知识 1.1 -> 什么是WebAPI 1.2 -> 什么是API 1.3 -> 什么是DOM 1.3.1 -> DOM树 2 -> 获取元素 2.1 -> querySelector 2.2 -> querySelectorAll 3 -> 事件初识 3.1 -> 基本概念 3.2 -> 事件三要素 4 -> 操…

Apache Tomcat 信息泄露漏洞CVE-2024-21733、CVE-2024-24549和CVE-2024-34750排查处理

一、漏洞描述 Apache Tomcat作为一个流行的开源Web服务器和Java Servlet容器并用于很多中小型项目的开发中。其中,Coyote作为Tomcat的连接器组件,是Tomcat服务器提供的供客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并且接收响应。 近日发现Apache To…

政企单位如何选择适合规模的即时通讯软件?

政企单位在不同规模的组织结构中都面临着沟通和协作的挑战。为了提高工作效率和团队协作能力,选择适合规模的即时通讯软件至关重要。本文将为政企单位在选择适合规模的即时通讯软件时提供一些关键要素和指导,同时重点介绍WorkPlus作为一个可以迎合政企单…

Java语言程序设计——篇十四(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

34_Web漏洞扫描工具、常见Web漏洞扫描工具、AWVS的部署与使用、 渗透测试执行流程、AWVS破解

Web漏洞扫描工具 Web漏洞扫描是在Web信息收集的基础上,进行更进一步的自动化的安全评估、漏洞挖掘、渗透测试 Web漏洞扫描会出现漏报,需要手工结合使用 常见Web漏洞扫描工具 AWVS、OWASP ZAP、Arachni、Nitko、Paros... 渗透测试执行流程&#xff1a…

IDEA研究院编程语言MoonBit发布beta预览版,快速实现多领域应用

MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性,在云计算、边缘计算、人工智能和教育等领域快速实现落地应用。Beta 预览版标志着 MoonBit 生态进入全新阶段,为用户提供更稳定、流畅的创新操作体验。 Moo…

C++入门——03内存管理

上图为C语言的内存管理,C中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。 1.new和delete操作符 1.1.new/delete操作内置类型 注意&#xf…

自闭症青年的行为特征有哪些

自闭症,又称孤独症,是一种神经发育障碍,它不仅影响儿童的成长,也会在青年时期展现出一系列独特的行为特征。了解这些特征对于更好地支持和帮助自闭症青年融入社会至关重要。 社交互动方面的困难是自闭症青年较为显著的特征之一。他…

IO进程(学习)2024.8.17

目录 文件属性获取 目录操作 标准IO 和文件IO 的区别 库 库的定义 库的分类 静态库 动态库 库的制作 制作静态库 动态库的制作 使用库 进程 程序和进程的区别 程序:编译好的可执行文件 进程:一个独立的可调度的任务 特点 进程段 进程…

SMS流媒体服务器-MPEG-PS流的深度解析

1.简介 ps流的解析,只要按照标准文档对照16进制的流数据,基本都能看的明白。但是实际项目中会碰到各种各样的问题。本文将对如何高效的解析出音视频数据发表一下个人的看法。 介绍一下本人的开源流媒体,点个star,有兴趣一起开发的…

应急响应:勒索病毒-实战 案例一.【Windows 系统-排查和解密】

什么是勒索病毒. 勒索病毒是一种恶意软件,它通过加密用户的数据或锁定用户设备,然后要求用户支付赎金以解锁数据或系统。勒索病毒的入侵方式多样,包括网络共享文件、捆绑传播、垃圾邮件、水坑攻击、软件供应链传播、暴力破解、利用已知漏洞攻…

javaweb_08:Mybatis入门(基于Springboot)

javaweb_08:Mybatis入门 一、引入二、快速入门(一)准备工作1、创建Springboot工程2、创建user数据库3、创建实体类 (二)引入MyBatis相关依赖,配置MyBatis。(三)编写SQL语句&#xff…

动态路由OSPF基础学习笔记一

由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。 动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF&#xf…

Linux I/O 多路复用机制详解

文章目录 1 文件描述符(File Descriptor)1.1 什么是文件描述符?1.2 文件描述符与文件的关系 2 文件描述符集合(File Descriptor Set)2.1 什么是文件描述符集合?2.2 fd_set 结构体 3 select() 函数的工作原理…

ros笔记06--从零体验ros2中launch系统

ros笔记06--从零体验ros2中launch系统 介绍创建步骤最基础的 launch 案例多节点 launch 案例 注意事项说明 介绍 ROS2系统通常由许多节点组成,这些节点运行在许多不同的进程(甚至不同的机器)上。虽然可以通过 ros2 run 单独运行这些节点,但当节点数量很…

【LLM入门】Let‘s reproduce GPT-2 (124M)【完结,重新回顾一下,伟大!】

文章目录 03:43:05 SECTION 4: results in the morning! GPT-2, GPT-3 repro03:56:21 shoutout to llm.c, equivalent but faster code in raw C/CUDA【太牛了ba】03:59:39 summary, phew, build-nanogpt github repo 03:43:05 SECTION 4: results in the morning! GPT-2, GPT-…

计算机毕业设计选题推荐-springboot 基于springboot的宠物健康顾问系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Windows系统下Go安装与使用

step1: 下载go语言SDK 下载地址:https://go.dev/dl/ 下载后选择合适位置安装即可,我选择D盘 在安装完成后,可以通过go env 命令检测是否安装成功。在“命令提示符”界面输入“go env”命令,如果显示如下类似结果则说明…

C++STL初阶(12):stack和queue的初阶实现

1. stack的选型 对于栈的实现是我们非常熟悉的过程: C语言基础数据结构——栈和队列_栈和队列 插入取出数据-CSDN博客 _top表示下标,_capacity表示空间大小: 那么按照我们原来的思路,利用_top和_capacity T*来给stack构形。 temp…

Grok 2携AI图片生成重生

埃隆马斯克&#xff08;Elon Musk&#xff09;的人工智能初创公司xAI推出其最新的AI助手Grok 2的测试版&#xff0c;添加了类似于OpenAI的DALL-E和Google的Gemini的图像生成工具&#xff0c;但对可以生成的图像类型的限制显然较少。<这是其中的一个“亮点”&#xff0c;一些…