什么?这个库已经out了?--如何让python使用历史版本库依赖

背景:

很多场合下,我们需要使用一些很早很早以前的代码,你开心地clone了他的repositories,开心的pip install,却发现第三方库之间存在各种版本依赖:有些库用的人多,更新迭代快;有些就基本上放hub上吃灰了。这种情况下,无脑缺啥pip啥,大概率会埋下报错的种子。

例子:

比方说我要用下面的代码(GLUE_board,两三年前了,BERT都还没生):
在这里插入图片描述
在这里插入图片描述
可以看到它README里面明确说了,env必须和他的.yml一致
在这里插入图片描述
如果直接用它的.yml conda create就会像这样:
在这里插入图片描述
原因在于allennlp,需要的版本是0.4,但是这会和torch 0.4不兼容,所以需要install from source
来到allennlp的repositories:
在这里插入图片描述

不愧是大组,两三年来更新了48个版本,接下来找到我需要的0.4.0:
在这里插入图片描述
把tar.gz手动down下来,然后放到机子上解压(我用的是linux服务器,windows就用.zip)
在这里插入图片描述

tar -xzf allennlp-0.4.0.tar.gz -C [your own direction]

这样本地就有了allennlp的代码,接下来的问题是怎么让我的python 能import 这个本地的direc,最简单的就是添加环境变量:
我们知道,shell每次开启都会使用.bashrc这个隐藏配置文件进行init,所以linux上直接修改自己home目录下的bash配置文件就可以了:

vim ~/.bashrc  # 这里 ~ 指的是usr的home目录

然后配置文件末尾添加这句:

export PYTHONPATH=[你本地的package direction]:$PYTHONPATH

之后保存退出vim,不要忘了重启shell:

source ~/.bashrc

上面这些操作的意思就是在原先PYTHONPATH里添加了本地allennlp这个package的路径,export 变量python的PATH为环境变量,这样的话该usr的python进程可以import这个direction下的package了,自然就能使用0.4版本的allennlp了。

进到python cmd下试试看:
在这里插入图片描述

这里报错是因为我这个环境里缺少了spacy dependency,但是可以看到import allennlp的报错源是我本地的allennlp package,说明现在确实已经可以import 本地package了

总结:

当你需要使用很早之前某些package的时候,直接pip install 会从channel下载比较新(一般是最新)的package,这会导致有些依赖不对应。所以需要:

  1. 去github找他的repositories中的历史release
  2. down 到本地解压
  3. 修改.bashrc(或者其他shell配置文件),添加本地路径至python PATH环境变量

猜你喜欢

转载自blog.csdn.net/weixin_43301333/article/details/113729897
今日推荐