关于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目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值