背景
最近几天计划将原Python项目迁移到Liunx服务器上,操作系统是SuSE 12 SP3。原以为Python项目迁移会比较方面,使用pip
安装requirements
包就好了,结果遇到不少问题。
问题
安装
mysqlclient
包时,出现了如下报错:1
2
3
4
5
6
7
8
9
10creating build/temp.linux-x86_64-2.7
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,3,9,'final',1) -D__version__=1.3.9 -I/usr/include/mysql -I/usr/local/python/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -m64
_mysql.c:29:23: fatal error: my_config.h: No such file or directory
#include "my_config.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
----------------------------------------
Command "/home/sysop/webapp/hzinfo/venv/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-4FRt1w/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-AgHBn8/install-record.txt --single-version-externally-managed --compile --install-headers /home/sysop/webapp/hzinfo/venv/include/site/python2.7/mysqlclient" failed with error code 1 in /tmp/pip-install-4FRt1w/mysqlclient/安装
ldap
库时,出现了如下报错:1
2
3
4
5
6In file included from Modules/LDAPObject.c:9:0:
Modules/errors.h:8:18: fatal error: lber.h: No such file or directory
#include "lber.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
思路
这些错乍看不一样,其实差不多,都是缺失了一些东西,导致安装失败。针对每个问题逐个谷歌百度就会发现,大家会告诉你需要安装对应的开发库及xxx-dev(el)
包。
比如上面第一个问题里,安装mysqlclient
包报错了,需要安装对应的dev包,在SuSE中是libmysqlclient-devel
。
xxx与xxx-dev(el)的关系
经过这两天的查询和总结,再Liunx中,一般会把软件拆分为两部分,一部分是直接使用的库即xxx
,另一部分就是开发用的库,包含一些头文件之类的,就是xx-dev(el)
。
差不多可以这样理解:当你只是使用某个软件的时候,你只要安装xxx
即可,但当你需要二次开发或者使用对应的一些插件的时候,很可能你就会需要再安装xxx-dev(el)
了。
https://blog.csdn.net/wangeen/article/details/14522227
解决办法
知道了问题的原因,那么解决办法就简单了。但是对于SuSE,尤其是没有外网的SuSE就不是了。
SuSE是收费的系统,没办法直接下载到对应的rpm安装包,需要挂载对应系统版本的SDK光盘。而问题是不断暴露和修复的,我们需要的dev包可能在最初获取的SDK光盘里不存在。查看了SuSE官网,有些补丁也是建议通过网络更新的,或者直接下载更新SDK安装盘。
https://www.suse.com/zh-cn/documentation/sles-12/book_sle_deployment/data/sec_add-ons_sdk.html
不过官网下载是相当的慢。。。
zypper的使用
zypper
是SuSE的当我们有了对应的sdk光盘或者目录之后,可以通过nfs的方式挂载到zypper
源中。
添加源
1
2
3zypper ar -t yast2 -n 'sles12sp3_sdk1' -fc nfs://122.16.125.112/iso/sles12sp3_sdk1 sles12sp3_sdk1
zypper ar -t yast2 -n 'sles12sp3_sdk2' -fc nfs://122.64.29.85/approot1/sles12sp3_sdk sles12sp3_sdk2
zypper ar -t yast2 -n 'sles12sp3_server' -fc fs://122.64.29.85/approot1/sles12sp3_server sles12sp3_server搜索需要的安装包
当遇到上述问题中的安装失败,使用如下的命令搜索下有哪些包可以安装:
1
zypper se mysql
显示结果如下:
安装对应的包
这里可以看到
libmysqlclient-devel
没有安装(前面有i
标记的即为已经安装),安装即可。1
~ # zypper install libmysqlclient-devel
搜索安装其他devel包
同理,在第二个问题中,我们搜索
ldap
,就会发现可以libldapcpp-devel
包没有安装。装好之后继续安装
python-ldap
还会遇到一个错误:1
2
3
4
5Modules/LDAPObject.c:18:18: fatal error: sasl.h: No such file or directory
#include <sasl.h>
^
compilation terminated.
error: command 'gcc' failed with exit status 1同理,再搜一下:
发现
cyrus-sasl-devel
包没装,也把装上,问题就解决了。
注意
python
也是有python-devel
包的,这个不要忘了。