ubuntu服务器使用anaconda部署python项目,并解决项目内模块ModuleNotFoundError

下载并安装anaconda3

下载

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
注意下载的版本,尽量与本地开发环境保持一致,我这里选择一个最新的
在这里插入图片描述

安装

将Anaconda3-2020.11-Linux-x86_64.sh上传至服务器指定目录,并在该目录下执行

bash Anaconda3-2020.11-Linux-x86_64.sh

接着查看用户协议,并输入yes回车继续安装
最后询问Do you wish the installer to initialize Anaconda3 by running conda init?输入yes,回车
安装成功。
测试:

conda env list

If you’d prefer that conda’s base environment not be activated on startup,
set the auto_activate_base parameter to false:
关闭开机自动激活base虚拟环境

conda config --set auto_activate_base false

创建虚拟环境

推荐每个项目都有独立的虚拟运行环境
project_name为虚拟环境的名称,建议与项目名称保持一致

conda create -n project_name

在这里插入图片描述

切换到该虚拟环境

conda activate project_name

注意观察虚拟环境的变化
在这里插入图片描述

安装pip,用于后续安装第三方包

conda install pip

在这里插入图片描述

查看pip

which pip

项目打包上传

导出依赖包名称和版本号

将项目依赖的第三方包和版本号导出的req.txt文件,在本地开发环境的项目根目录运行:

pip freeze > req.txt

req.txt名称可以任意填写
在这里插入图片描述

服务端下载第三方包

将requirements.txt上传到服务器任意目录。
切换到新建的虚拟环境

conda activate project_name

使用pip安装依赖的第三方包,使用国内源加速

pip install -i https://mirrors.aliyun.com/pypi/simple/ -r req.txt

安装成功

将项目打包上传至指定目录并运行

使用项目专属虚拟环境的python运行

/home/hx/anaconda3/envs/demo/bin/python /home/hx/projects/demo/test.py

问题1:项目内部的自定义包找不到ModuleNotFoundError

例如项目结构如下:
在这里插入图片描述
被其他包下的文件引用时

from conf.global_conf import globalconf

在本地开发环境没有问题,但是部署到服务器会报
ModuleNotFoundError: No module named ‘conf’
原因是项目内的包和文件不在python运行环境内,所以无法识别和导入。
解决方案:
方案1:将项目路径添加到PYTHONPATH(不推荐,会影响整个运行环境,可能会和其他项目冲突)
方案2:在py代码内添加sys.path.append(项目路径) (不推荐,每个代码里都要添加)
方案3:在site-packages下添加.pth文件(推荐
方案3操作步骤如下:
切换到虚拟环境的site-packages目录下:

cd /home/hx/anaconda3/envs/demo/lib/python3.9/site-packages

创建一个.pth文件,例如mypath.pth

touch mypath.pth

编辑文件

vim mypath.pth

在文件内添加一行

/home/hx/projects/demo

保存退出,重新运行项目即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值