虽然写了快一年python了,但是一直对python并不熟悉,尤其是各种包什么的,太乱了。今天记录一下python三方库build安装时候的一堆事儿吧。
最初遇到这个问题是出于项目需要,项目组大牛写了个库,开始的时候是把他的环境所在盘挂载到我的服务器上。后来有天呢,我的服务器出问题了,盘被umount了,然后我的程序就没法跑了,一想这不行呀,还是自己build一个吧。然后就去他的git上把code clone下来了。首先编译外部依赖库,然后install python库,这中间太多曲折,一把心酸泪。
- 首先看完他的build.md,把依赖装好,完了直接编译,ok;
- 然后呢,就跑到python 库下面去build,结果报了‘****’ not defined的错误,然后请教了一下,大神回复说是加上编译包含路径。于是在~/.bashrc下加了export C_INCLUDE_PATH=****,完了source一下之后继续build,发现很快就完成了。很开心呀,直接跑了一下,发现python报错,AttributeError: 'module' object has no attribute '****',完了 肯定哪儿不对。然后就翻看了python库,发现版本不对,额~~~~
- so跑到目录下重新checkout了,然后重复了上述操作,悲催的是build的时候总是报错‘****’ not defined,一看这不是刚才的错误吗,一毛一样呀,不是加了C_INCLUDE_PATH了嘛,苦死冥想呀,唯一区别我用了sudo ?然后就试着echo $C_INCLUDE_PATH 和 sudo echo $C_INCLUDE_PATH,没有问题呀,期间还自己写了一个.c,但是编译ok的 ,这就诡异了,不懂不懂,于是又请教了某神,某神一脸鄙视的秀了三种操作, 尴尬~
- 使用普通用户直接build, ok了~~因为我是install,要加sudo,但是环境变量不对导致build的时候找不到。
- 使用-E参数拷贝复制环境变量,sudo -E python setup.py install。
- 使用sudo的时候加上包含路径,sudo C_INCLUDE_PATH = ***** python setup.py install。
- 安装完了之后,跑了下可以,然后就把服务起起来了,跑的时候发现,程序core dumped了,wr!!这就事儿大了,找了一圈,发现某个函数core dumped了,然后就找到这个函数,发现这个函数不是新加的呀,怎么会内存异常了,想了很久,该不会是之前装的时候build版本不对导致的吧,于是乎跑到 /usr/lib/python2.7/dist-packages下,把所有build的东西全删了,回去又重新build install,遂解决!!
彩笔还需努力呀~