最近在做一些老的金融模型迁移工作,遇到了一个比较头疼的问题。在使用pip安装一个叫quadprog的包时候,报了一个gcc找不到文件的错误。
因为老环境是Windows的机器,新机器是CentOS的,在window的whl安装包还不能直接放在机器上使用。
遇到这种问题,很有可能是在安装python的时候,linux系统上某些配置的版本低了,或者缺少造成的。
我就去网上搜索了一下,yum install 安装一系列的配置,甚至最后把Python都重装了,还是不行,整个人都傻了。
说实话,我做程序员这么多年,在工作中遇到什么问题比较难受?那做环境还是一个比较头疼的事情。这里的环境特指是相对的物理环境。
很多公司,尤其是规模相对比较大,在行业中沉淀了许多年,有一定的商业机密的时候。这时候,公司的信息化系统一般都是在自己的私有环境,有自建的机房,有自己的办公网络,而且这个网络多数跟互联网不能联通,至少生产环境是这样。
这为了安全起见,才做这样的物理隔离,但是对于开发人员,那就比较痛苦了。
不管是最常见的Java还是python,都会有很多的依赖,java还好点,尤其python可能还有一些包依赖 c/c 的东西,都需要从外网下载相关的包。
遇到好的情况,有的公司会在自己的内网做一个仓库,定时同步外网的仓库,比如阿里云的maven仓库,把镜像地址改成内网的,这样pip或者yum还可以用。
遇到坏的情况,就是啥都没有,没有代理,也没有自己的仓库,这就很难受。在这种情况下,总不能不工作吧。
经过了一周的尝试,最终发现解决这个问题竟然如此简单,真是踏破铁鞋无觅处,得来全不费工夫。
先说下结论:配置一台可以连接外网的与生产环境相同的机器,在这台机器上把环境做出来,然后copy到公司内网机器,即可一步到位解决环境问题。
以python环境,一般都是用的anaconda来搭建环境。这时候,你需要在外网买一台与生产环境相同物理架构和操作系统的机器。公司用的centos,就是买centos,公司用的unbatu,就你用unbantu。甚至公司用windows,你也买windows。
云服务器厂商(某腾,某里云)都有学生云服务器,直接搜关键词就能找到入口,一年也就四五百块钱(2H4G),某腾25岁以下免学生认证,实在年龄超了,你就用弟弟妹妹的身份证注册一个。
你自己买的这台机器在云服务器是可以上国内互联网的,甚至可以上外面的网。虽然带宽可能是3M,5M,但是至少能下载东西。
这时候,如果当你需要做一个新的环境,尤其是因为一个新开发的工作,需要用新的包的时候。现在你自己的云主机的做好,然后把envs文件夹下的内容打包压缩,发到公司里的机器,这样你的环境就可以了。
为什么不用离线安装呢?问题就是,有时候你虽然安装的a包,但是a可能还依赖了b包,最后又发现b还依赖c。这种问题就很烦了,多数情况下在安装a的时候,并不知道它到底有多少依赖。
在线安装的时候,如果有依赖,是可以自动下载并安装的,所以不如干脆直接在有外网的环境中做好,然后把文件copy进来,一步到位。
虽然做环境不是天天都需要的工作,基本做一次就够了,但凡是做环境,肯定遇到这样那样的问题,记住我说的,看看以后是不是。
好了,不用太感谢我,我是马拉松程序员,可不止代码。