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

背景:最近在使用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.rhkb.cn/news/402608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt登录窗口设计

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…

django中的MESSAGE组件

文章目录 message组件1 使用配置2 设置值3 读取值4 源码分析 message组件 1 使用配置 INSTALLED_APPS [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,"…

vuex的原理和使用方法

简介 Vuex 是 Vue.js 应用的状态管理模式&#xff0c;它为应用内的所有组件提供集中式的状态&#xff08;数据&#xff09;管理。可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 Vuex的构成 state&#xff1a;state 是 Vuex 的数据中心&#xff0c;也就是说state是用来…

修改系统启动环境变量

修改系统启动环境变量 查看uboot默认env 首先连接好开发板的串口终端&#xff0c;在开发板上后&#xff0c;一直快速短按 空格键 即可进入 uboot的 shell 交互命令行内。在命令行内输入 print 命令&#xff0c;可以看到当前系统的所有环境变量。 > print aw-ubi-spinand…

[DL]深度学习_针对图像恢复的高效扩散模型DiffIR

DiffIR: Efficient Diffusion Model for Image Restoration Abstract 扩散模型(DM)通过将图像合成过程建模为去噪网络的顺序应用&#xff0c;实现了SOTA的性能。然而&#xff0c;与图像合成不同的是&#xff0c;图像恢复(IR)对生成符合ground-truth的结果有很强的约束。因此&am…

【Linux基础】Linux中的开发工具(1)--yum和vim

目录 ✈️前言一&#xff0c;Linux 软件包管理器 yum1. 什么是软件包2. 如何安装软件3. 如何卸载软件 二&#xff0c;Linux编辑器-vim使用1. vim的基本概念1.1 命令/正常/普通模式1.2 插入模式1.3 底行模式 三&#xff0c;vim命令模式命令集1. 移动光标2. 删除字符3. 复制4. 替…

用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)

用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码&#xff01; 时光荏苒&#xff0c;转眼间已逾一年未曾在此留下墨香。尽管这一年间&#xff0c;博主投身于无尽的忙碌与挑战之中&#xff0c;但令人欣慰的是&#xff0c;那份初心与热情似乎并未因岁月的流…

Django后台数据获取展示

​ 续接Django REST Framework&#xff0c;使用Vite构建Vue3的前端项目 1.跨域获取后台接口并展示 安装Axios npm install axios --save 前端查看后端所有定义的接口 // 访问后端定义的可视化Api接口文档 http://ip:8000/docs/ // 定义的学生类信息 http://ip:8000/api/v1…

Ubuntu下交叉编译器工具链的安装方法

本篇文章记录Ubuntu下交叉编译器工具链的安装方法。 目录 一、交叉编译器 1、交叉编译器简介 2、获取交叉编译器 3、安装交叉编译器 4、安装相关库 二、结语 一、交叉编译器 1、交叉编译器简介 交叉编译器是一种编译器&#xff0c;它在一种平台上运行&#xff0c;但生成…

如何获取VS Code扩展的版本更新信息

获取VS Code 扩展的版本更新的需求 因为企业内部有架设私有扩展管理器的要求&#xff0c;但是对于一些官方市场的插件&#xff0c;希望可以自动获取这些扩展的更新并上传至私有扩展管理器。于是就有了本篇介绍的需求&#xff1a; 通过API的方式获取VS Code 扩展的更新。 关于…

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

STM32入门开发操作记录(九)——外部时钟定时器

目录 一、项目准备1. 工程模板2. 器件接线 二、外部时钟1. 端口复用2. 流程示意 三、定时器模块Timer.cTimer.h 四、遮光计数 一、项目准备 1. 工程模板 本篇项目所用模板包含以下模块&#xff0c;声明函数见头文件&#xff0c;模块添加和函数功能详见往期记录。   2. 器件…

Python之格式化输出

格式化输出 方法一&#xff1a;用%方法二&#xff1a;用format()函数设置输出的内容的宽度和小数位数 方法一&#xff1a;用% 直接用print()函数对字符串进行输出&#xff0c;是没有进行格式化控制的。 格式化&#xff0c;是对输出内容的显示方式进行设置。 首先&#xff0c;要…

小程序滑动单元格

项目场景&#xff1a;小程序用户管理列表&#xff0c;通过单元格滑动实现“密码重置”、“删除”功能。 技术框架&#xff1a;uniapp、uview3、ts 效果如下&#xff1a; 前端页面&#xff1a; <template><view class"fui-wrap"><view class"f…

Spring Boot 的Web开发

Spring Boot 的Web开发 一、 静态资源映射规则 总结&#xff1a; 只要静态资源放在类路径下&#xff1a; called /static (or /public or /resources or /METAINF/resources 访问 &#xff1a; 当前项目根路径/ 静态资源名 二、 enjoy模板引擎 Enjoy模板引擎是一个轻量级的…

数据结构-常见的七大排序

上节中我们学习了七大排序中的五种(插入排序、希尔排序、堆排序、选择排序、交换排序) 数据结构-常见的七大排序-CSDN博客 这节我们将要学习快速排序(hoare、指针法、挖洞法(快排的延伸)、快速排序非递归(栈)) 1.快速排序 1.1 hoare法 1.1思路 1.选出一个key&#xff0c;一…

浅看MySQL数据库

有这么一句话&#xff1a;“一个不会数据库的程序员不是合格的程序员”。有点夸张&#xff0c;但是确是如此。透彻学习数据库是要学习好多知识&#xff0c;需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西&#xff0c;跟着小编一起来看一下吧。 什么是数据…

Windows 11环境下安装uwsgi的步骤和方法

正在用Django做个小网站&#xff0c;经常要用runserver启动服务观察效果&#xff0c;很不方便&#xff0c;就想装个uwsgi&#xff0c;让服务总是在后台运行&#xff0c;免得切换。上网一查发现&#xff0c;在windows下安装uwsgi不是一件简单的事情&#xff0c;很多人在尝试之后…

Python | Leetcode Python题解之第338题比特位计数

题目&#xff1a; 题解&#xff1a; class Solution:def countBits(self, n: int) -> List[int]:bits [0]for i in range(1, n 1):bits.append(bits[i & (i - 1)] 1)return bits

Spring Web MVC入门(下)

1. 响应 1.1 返回静态页面 创建前端页面&#xff0c;如下图所示&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Index页面</title> </head> <body>Hello,Spring MVC…