python依赖库管理及迁移

python依赖库管理及迁移

Why

python的包特别多,这为我们带来了方便也造成了不变,主要问题如下:

  1. 开发环境迁移时,我们要将所有现有安装包再在新的机器上安装一遍;
  2. 已安装包在后续更新时变动较大,可能会影响现有代码。希望可以在不同环境下执行。

What

目前有三种 python 依赖包管理方式:

  1. conda ,相信大家对anaconda并不陌生;
  2. pip ,管理第三方库;
  3. docker,容器化是现在非常火的一个方案。docker容器崩溃也不会影响主机,而且环境镜像可移植性非常强,能非常方便地把环境移植到不同的主机上去而不需要重新配置安装。(这里先挖个坑,等新东大神传授之后再来补充)
  4. virtualenv 是一个针对python建立定制的虚拟环境的工具,可以在虚拟环境中指定python版本并使用pip安装到激活的虚拟环境中;

How

使用conda及问题

把自己的环境打包带走,需要注意的是 conda 环境需要完全一致。
比如我在本地中建了一个python2.7的虚拟环境,地址在

/Users/shang/anaconda3/envs/py27

可以看一下 bin/pip 文件中是什么

#!/Users/shang/anaconda3/envs/py27/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

注意到第一行,是指定了python 路径的,而且是绝对路径,如果在服务器之间做环境迁移,应该是可以做到保证路径相同的,比如都是

/home/work/software/anaconda3/envs/py27/bin/python

使用pip

这个方法表较使用简单,就是先知道原来安装了什么包,再在新环境安装一遍。这样也是好的,总比运行一遍.py文件报个错安个包的方法好==

pip freeze > requirements.txt  #获得依赖包
pip install -r requirements.txt #安装依赖包

注意:pip freeze输出的是本地环境中所有三方包信息,但是会比pip list少几个包,因为pip,wheel,setuptools等包,是自带的而无法(un)install的,如果要显示所有包可以加上参数-all,即pip freeze -all

使用docker

待续

发布了120 篇原创文章 · 获赞 35 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u012328476/article/details/83653166
今日推荐