对于服务器系统,
服务器选用的Linux系统,推荐的有3个选择,视情况不同而选择:
- Debian系(服务器主要用Debian的stable分支,ubuntu server虽然可以了,但是稳定性不放心)
- RedHat系(如果不想购买服务,那么就是CentOS这个分支了,fedora社区版本,不适合)
- BSD系(FreeBSD,OpenBSD,NetBSD)
由于我要对接的服务器的原因,我选择的是 红帽企业Linux.6.4.服务器版,如果是个人开发者,建议CentOS会好一点。
下载链接为:
[红帽企业Linux.6.4.服务器版].rhel-server-6.4-x86_64-dvd[ED2000.COM].iso
当然,对于我这种没有接触过服务器开发的菜鸟来说,在 windows 平台下安装个虚拟机开发是最好的选择了。
说到虚拟机,本来想要选用 VMware 的,结果一时手滑,下载了 VirtualBox,
结果就将就着用了,没想到后来才发现是个大坑,后面再说。。
虚拟机 Linux 系统安装
对于虚拟机 Linux 安装网上的教程有很多,我就不细说了,看了很多篇之后,我觉得下面这篇是最适合 rhel
系统的安装教程
大部分都是按照教程走就行了,不过在用 VirtualBox 新建虚拟机时,我想要提两点:
- 选择虚拟机在物理硬盘的存储方式时,不要选择动态分配,选固态分配
- 选择所需要的虚拟机的硬盘大小不要选默认的8g,最好选10g以上。
这样可以避免后来开发会遇到的一个坑。
在安装过程中,我是没有选择安装桌面的,因此启动的时候都是命令行形式,用 login in:root 和 你之前设定的密码 就可以登录了。
Linux 系统 Python 升级
Linux 系统默认是有内置 Python 环境的,不过版本都比较低,很多新的特性和库都支持不了,因此升级 Python 是必须的。
目前,Python 有两个版本,一个是 2.x 版,一个是 3.x 版,这两个版本是不兼容的,因为现在 Python 正在朝着3.x 版本进化,在进化过程中,大量的针对 2.x 版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在 3.x 上使用。
所以,Python 的版本我选择的是 2.7 的版本,我在里面随便挑了 2.7.12 的版本,当然你要下载别的也可以,只需要在 Python 官网找到并修改一下下载链接就行。
- 下载所需的Python
# wget --no check certificate
http://python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
- 解压
# xz -d Python-2.7.12.tar.xz
# tar xvf Python-2.7.12.tar
- 进入解压后文件夹并编译
# cd Python-2.7.12
# ./configure --prefix=/usr/local/python2.7
# make
# make install
- 备份原有的 python
# mv /usr/bin/python /usr/bin/python2.6
- 建立新的软链接
# ln -s /usr/local/python2.7/bin/python /usr/bin/python
-
Python 2.7安装成功
yum 部署
RedHat 的 yum 源需要注册和付费,因此我整理了 RedHat 安装 CentOS 的方法,亲测成功。
- 下载安装包
可通http://mirrors.163.com/centos下载,但有时候公司网络用不了,故这里提供我下载好的 http://pan.baidu.com/s/1pL9KEzL - 卸载 RedHat 内置的 yum
# rpm -qa | grep yum | xargs rpm -e --nodeps
- 安装 CentOS 的 yum
# rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
# rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
# rpm -ivh yum-3.2.29-40.el6.centos.noarch.rpm
yum-plugin-fastestmirror-1.1.30-14.el6.noarch.rpm
(这两句要同时输入,因为他们之间有依赖关系)
- 安装 CentOS6-Base-163.repo
将第一步下载的 CentOS6-Base-163.repo 拷贝到 /etc/yum.repos.d 中,并将该文件夹中的 rhel-source.repo 改 rhel-source.repo.bak 作备份。 - 修改 yum 调用
打开 yum 文件
# vim /usr/bin/yum
把首行的 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
- 清除原有缓存
# yum clean all
- 获取 yum 列表
# yum makecache
得到如下结果:
至此 yum 安装完成,可以 yum install 安装程序了。
机器学习库部署
pip 是一个 Python 包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具,所以,为了不花很多精力去找离线安装文件,推荐采用 pip 工具来自动下载。
- 下载安装脚本
get-pip.py - 安装 pip 工具
# python get-pip.py
- 采用 pip 工具安装库
# pip install numpy
# pip install scipy
# pip install matplotlib
# pip install sklearn
至此,Linux下机器学习开发环境就基本部署好了。
填坑
文件共享
由于手滑将就了 VirtualBox 是有代价的,在实际操作的时候,windows 和虚拟机之间文件共享就是个坑,不仅网上资料很少,而且还不能用,最后我还是靠 Xshell 解决了这个问题(不过那传输速度实在不敢恭维)
Xshell 的教程网上有,但是不知道什么原因,那个通过 # ifconfig 看 eth0 的 ip 然后建立连接的方法我是不成功的。
如果你们也设置不成功的话,那么就用我探索出来的一个办法吧。
首先,你的 VirtualBox 设置网卡1为 Host-Only ,网卡2为 网络地址转换(Nat),使用# ifconfig 查看 eth1 的 ip地址 ip1;
然后去适配器配置中心
查看VirtualBox Host-Only Network的属性,如果是动态ip地址的话,就把它改成固定ip,然后ip的前两段保持不变,后两段自己定义,记下 ip 地址,即 ip2;
接下来去 VirtualBox 的网卡2设置,点开高级——端口转发,新建规则,把 ip1 和 ip2 填上去,端口默认22。
最后,Xshell 用 ip2 和端口值 22 就可以顺利登录到你的虚拟机了,然后在 Linux 上通过 # yum -y install lrzsz 安装好服务后,就可以使用# rz 和# sz 可以轻松实现文件共享。
Tkinter 不能使用的问题
在 Linux 下使用 Python 的时候,我发现一旦使用绘图命令,就会出现 Tkinter 不存在的情况,Tkinter 模块("Tk 接口")是 Python 的标准 Tk GUI 工具包的接口,没有它是无法绘制图形界面的(当然,如果要绘制图形你的 linux 必须处于桌面图形工作状态而不是命令行模式)。
注:因为问题已经解决了,懒得去重复一遍,所以我会简单点说,如果不是很特殊的话,我还是建议在Windows环境下绘图就好了。
首先,你需要 yum 安装 tk-devel 和 tcl-devel,然后重新编译 python ,这时候你需要先去找你的 tk 和 tcl 安装在哪里,还有 tk.h 和 tcl.h 在哪一个位置,一般是在 /usr/lib64 和 /usr/include 里,然后打开有 python 编译文件的那个目录,输入
# vim ./Modules/Setup.dist
,修改以下内容:
_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \ #去掉注释符
-L/usr/local/lib \ #换成 tk 和 tcl 链接库的目录
-I/usr/local/include \ #换成 tk.h 和 tcl.h 的目录
-ltk8.2 -ltcl8.2 \ #换成安装的 tk 和 tcl 的版本号
-lX11 #去掉注释符
例如下图
修改好后执行编译指令,和原来安装 Python 一样,如果重新编译后的 Python 调用 numpy 等出错,那就把 /usr/local/python2.7/lib/python2.7/site-packages 里对应的库相关文件删掉,重新 pip 安装一下这些库就好了。
总结
这篇主要介绍了 Linux 下 python 开发环境部署的工作,网上资料虽然比较多,但自己去操作还是有不少波折的,故希望笔者整理探索的过程能给 Linux 小白爱好者带来方便,避免走太多弯路,足矣。