ubuntu服务器使用anaconda部署python项目
下载并安装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
保存退出,重新运行项目即可