记录一次在内网Linux环境安装Python的经历
来源:互联网 发布:qq飞车终极麦凯伦数据 编辑:程序博客网 时间:2024/04/29 05:24
目标
因工作需要,希望在内网的一台Linux Server上安装Python及相关工具包。但在实际安装过程中,遇到了缺少依赖包等问题。
安装时问题
缺少依赖软件包或模块
$ ./configure --prefix=/usr/local/python-2.7$ makerunning buildrunning build_extINFO: Can't locate Tcl/Tk libs and/or headersPython build finished, but the necessary bits to build these modules were not found:_bsddb _curses _curses_panel _sqlite3 _ssl _tkinter bsddb185 bz2 dbm dl gdbm imageop readline sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name.running build_scripts##编译时,提示缺失部分模块
zlib模块找不到
#修改Python安装源文件中Modules/Setup.py,去掉#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz$ ./configue --prefix=...$ make#提示:Python build finished, but the necessary bits to build these modules were not found:_bsddb _curses _curses_panel _sqlite3 _ssl _tkinter bsddb185 bz2 dbm dl gdbm imageop readline sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name.running build_scripts
此处,虽然python2.7.9安装成功,但缺少很多模块。
升级系统原有2.4版python
$ python -V #检测系统原有python版本,发现为2.4版。$ cd /usr/bin$ mv python /usr/bin/python_v24bak.bak #重命名原python$ ln -s /usr/local/python-2.7/bin/python ./python #建立软链接到python2.7$ python -V #检测目前的python版本,发现已变更为2.7.9#注意:因为yum依赖系统自带的原python2.4版本,为保证yum正常执行,还需要编辑yum,#修改第一行#!/usr/bin/python 为:#!/usr/bin/python2.4
此处的升级过程中,又不可避免地变更了系统原有的python。
安装setuptools
若想安装python某些模块,需要首先安装好setuptools。
#上传setuptools-15.2.tar.gz并解压:setuptools$ cd setuptools-15.2$ python setup.py install# 安装成功,提示:...Processing setuptools-15.2-py2.7.eggCopying setuptools-15.2-py2.7.egg to /usr/local/lib/python2.7/site-packagesAdding setuptools 15.2 to easy-install.pth fileInstalling easy_install script to /usr/local/binInstalling easy_install-2.7 script to /usr/local/binInstalled /usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.eggProcessing dependencies for setuptools==15.2Finished processing dependencies for setuptools==15.2
此处,虽然安装好了setuptools,但因无法直接联网,导致很多软件仍然无法自主安装。
安装soaplib工具包
安装soaplib提示依赖lxml;安装lxml时,发生报错:
...src/lxml/lxml.etree.c:201156: 错误:‘xsltDocLoaderFunc’ 未声明 (在此函数内第一次使用)src/lxml/lxml.etree.c:201156: 错误:expected ‘)’ before ‘__pyx_f_4lxml_5etree__xslt_doc_loader’error: command 'gcc' failed with exit status 1
此处需要先安装依赖: libxml2-devel, libxslt-devel;而按照libxml2-devel时,则提示需要依赖zlib-devel
# rpm -ivh libxml2-devel-2.6.26-2.1.21.el5_9.3.i386.rpm warning: libxml2-devel-2.6.26-2.1.21.el5_9.3.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897error: Failed dependencies: zlib-devel is needed by libxml2-devel-2.6.26-2.1.21.el5_9.3.i386
以上,依赖包太难找,短期内无解!
最终的解决办法
经过此问题,可以看到,我们需要的是一个独立的python安装包,能尽量做到不依赖外部环境。通过查找,发现Anaconda可以满足要求。
什么是Anaconda
Anaconda Python 是完全免费的企业级的Python集成软件包。主要用于大规模数据处理、预测分析和科学计算。它自带的科学计算包注意包括:numpy, sicpy, matplotlib, spyder等。
更多资料,请参考Anaconda官网。
为什么选择Anaconda
主要理由:1、在Linux系统里面,Anaconda只依赖一个bash命令即可安装,且所有的东西都只安装在一个目录中。这意味着它不需要过多依赖linux本地环境。2、它通过conda命令进行自动安装、更新和删除,这说明它对包的管理比较规范。当然,笔者对该工具的使用尝试也是刚刚开始,不排除将来触碰到其局限性。本文仅做参考。
安装及使用
首先,在官网下载相关软件包。
然后,在服务器上安装。安装命令非常简单:
$ bash Anaconda-2.2.0-Linux-x86.sh#开始安装,安装时可自主指定安装目录。安装成功后,查看:$ which conda/home/anaconda/bin/conda
Anaconda自带了很多非常有用的包,但若希望继续安装自己需要的包,可通过conda命令进行安装。这是因为conda与pip关联得很好,可以很方便地自主安装、升级工具包。比如,若希望安装cx_Oracle,则:
$ conda install cx_Oracle #使用conda命令安装cx_OracleFetching package metadata: ....Solving package specifications: .Package plan for installation in environment /home/anaconda:The following packages will be downloaded: package | build ---------------------------|----------------- oracle-instantclient-11.2.0.4.0| 0 54.0 MB conda-env-2.1.4 | py27_0 15 KB cx_oracle-5.1.2 | py27_0 151 KB python-2.7.9 | 3 13.4 MB requests-2.7.0 | py27_0 594 KB setuptools-15.2 | py27_0 435 KB conda-3.12.0 | py27_0 167 KB pip-6.1.1 | py27_0 1.4 MB ------------------------------------------------------------ Total: 70.1 MBThe following NEW packages will be INSTALLED: cx_oracle: 5.1.2-py27_0 oracle-instantclient: 11.2.0.4.0-0 The following packages will be UPDATED: conda: 3.10.0-py27_0 --> 3.12.0-py27_0 conda-env: 2.1.3-py27_0 --> 2.1.4-py27_0 pip: 6.0.8-py27_0 --> 6.1.1-py27_0 python: 2.7.9-2 --> 2.7.9-3 requests: 2.6.0-py27_0 --> 2.7.0-py27_0 setuptools: 14.3-py27_0 --> 15.2-py27_0 Proceed ([y]/n)? yFetching packages ...oracle-instant 100% |######################################################################| Time: 0:13:16 71.05 kB/sconda-env-2.1. 100% |######################################################################| Time: 0:00:00 32.06 kB/scx_oracle-5.1. 100% |######################################################################| Time: 0:00:02 69.64 kB/spython-2.7.9-3 100% |######################################################################| Time: 0:03:33 65.52 kB/srequests-2.7.0 100% |#############################################################################| Time: 0:00:14 41.45 kB/ssetuptools-15. 100% |#############################################################################| Time: 0:00:08 50.05 kB/sconda-3.12.0-p 100% |#############################################################################| Time: 0:00:02 62.71 kB/spip-6.1.1-py27 100% |#############################################################################| Time: 0:01:02 23.24 kB/sExtracting packages ...[ COMPLETE ] |###############################################################################################| 100%Unlinking packages ...[ COMPLETE ] |###############################################################################################| 100%Linking packages ...[ COMPLETE ] |###############################################################################################| 100%
当然,一般情况下,也可以采用easy_install进行安装。
最后,当在一台机器上安装完毕后,可以将下载的package或egg文件平移到其他的目标服务器上。
- 记录一次在内网Linux环境安装Python的经历
- 一次安装fedora linux的经历
- 记录一次被库搞死的经历
- 一次经验记录--Linux环境安装vue.js
- 记录一次坑自己的维护经历
- 记录一次非常蠢的经历
- 记录一次iOS上线的坎坷经历
- 记录一次很遗憾的面试经历
- 记录自己愚蠢的一次经历
- 记一次linux安装黑苹果经历
- 记录一次面试经历:参加北京网梯科技发展有限公司的面试经历
- [python]记录Windows下安装matplot的经历
- 记录一次爬虫经历
- 用python写的一次爬虫经历
- 记录一次大规模linux系统root密码撞库的经历
- QT安装的经历记录
- ITDS安装的一次恶心经历
- 安装本地打印机失败的一次经历。
- Android Studio 打包及引用 aar
- Android初学笔记之<LogCat只输出某一特定应用或某一特定TAG>
- (转)android的消息处理机制(图+源码分析)——Looper,Handler,Message
- hbase参数配置优化
- 使用self. 导致的内存泄露
- 记录一次在内网Linux环境安装Python的经历
- 关于bitset中低阶位与高阶位的理解
- __block的使用
- Java 理论与实践: 正确使用 Volatile 变量
- JSP与Servlet的关系
- 数学之美--笔记7
- LintCode-快速幂
- 二---android -jni(参考网页)(3)
- HDU 3435 A new Graph Game