PYTHON虚拟环境管理
Anconada & MiniConda
anaconda 是一个比较全面的PYTHON工具包,安装了FLASK,科学计算等一系列的库,而 MiniConda 只是包含一个环境管理工具,PYTHON环境这些需要自己安装,这里主要还是讲使用conda进行环境管理
创建环境
conda create --name py377 python=3.7.7 --channel conda-forge
激活虚拟环境
conda activate py377
在虚拟环境中安装PYTHON模块
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwt
使用 -i
参数指定安装模块所在的网站
检查项目依赖
cd app-root pipreq ./
根据软件依赖文件批量安装依赖包
pip install -r requirements.txt
requirements.txt 如下(示例)
# modulename[(==|>|<)version] requests tushare<0.8 psycopg2 pandas==0.24.0 xlwt
pip install -q[qq] module 静默安装,只显示必要的信息
如果要写Crond计划任务文件,注意将激活了环境后的PATH变量的值传送给计划任务文件
# vi /etc/cron.d/IPMS PATH="/opt/soft/anaconda202002/envs/py377/bin:/opt/soft/anaconda202002/condabin:/opt/software/spark-2.3.0-bin-hadoop2.7/bin:/opt/software/spark-2.3.0-bin-hadoop2.7/sbin:/usr/local/jdk1.8.0_161/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/ssh-server/bin:/root/bin" MAILTO="" */5 * * * * c_HsiaoTien /opt/devel/IPM/sbin/arp-scan refresh
范例
创建JupyterLab配置文件并设置密码
jupyter server --generate-config jupyter server password vi ~/.jupyter/config.py
之后可以启动JUPYTER
使用 MicroMamba
MicroMamba 是一个 MiniConda 的替代,在官网安装最新的 MiniConda 时,可能会遇到GLIBC标准库过旧的问题,这个库是LINUX系统核心库,一般不能变更。而 MicroMamba 不需要太高版本的 GLIBC,另外 具官方说明,该工具是一个单文件的小工具,且在处理虚拟环境时稳定性更好。
官方网站:MicroMamba
安装
Linux
"${SHELL}" <(curl -L micro.mamba.pm/install.sh)
Windows Powershell
Invoke-Expression ((Invoke-WebRequest -Uri https://micro.mamba.pm/install.ps1).Content)
环境管理
参考 Anconda, 在创建虚拟环境时,可能报 NOT EXISTS,这样的话,可以用更短的版本号试试,比如 我们创建一个PYTHON3.7的环境,在使用 python=3.7.7
时报不存在,但使用 python=3.7
时就可以创建。
虚拟环境的打包和转移
在源机器上
激活需要打包的环境
micromamba activate my-app
安装打包工具
pip install conda-pack
进行打包
conda-pack # 打包当前激活的环境 conda-pack -n my-app # 根据虚拟环境名称打包 conda-pack -p /opt/micromamba/envs/my-app #根据环境目录打包 conda-pack -n my-app -o output-name.tar.gz #指定打包的文件名
打包完成后,会在你执行命令的目录下出现一个 my-app.tar.gz
的压缩文件
目标机器
mkdir -p /opt/my-app tar xzvf my-app.tar.gz -C /opt/my-app . /opt/my-app/bin/activate #激活环境 . /opt/my-app/bin/deactivate #解除激活 conda-unpack #
注意:目标机器与源机器发行版本要一致,最好是完全一致,如果不能做到这一些,应该做到发行版比原来的新,且不要跨度太大
另外,此方法只打包PYTHON环境,但如果项目调用了非PYTHON功能,比如 snmpwalk 之类的系统命令,还有一些其他动态链接库,如 libpq
之类的外部库,也要一并解决。