编程,作为生物信息学的一个基础性技能,是任何一个生信工程师都无法绕开话题。也许有些人还在纠结 Perl 和 Python 到底应该学习哪一个,但作为目前最火最流行的编程语言 Python 还是非常值得尝试的。它不但可以进行文本处理,在统计、网站、游戏、爬虫、数据可视化等方面也有非常强大的应用,比起曾经的 Perl 真的强大和全面很多,且在学习曲线上比 Perl 更容易入手。不管从长远发展,还是短期需要,学会 Python,看懂 Perl (或者先学  Python,后学 Perl) 应该是每一个生信工程必备的基础技能之一。

工欲善其事,必先利其器。关于 Python 安装教程在网上一搜一大把,但总感觉不够全面,尤其对于中间出现的一些问题的解决方法不尽如人意。鉴于此,本文基于 CentOS Linux release 6.5 对 python-3.7.3 的源码编译安装进行了一下简单的总结,记录如下。

1. 安装环境

操作系统  :CentOS Linux release 6.5 (x86_64)GCC 版本:4.8.5 20150623

2. 安装步骤

如果您拥有 root 权限,请执以下依赖安装:

yum install zlibyum install zlib-develyum install opensslyum install openssl-develyum install libffiyum install libffi-devel

如果您没有 root 权限,可以参考《手把手教你如何在 Linux 上源码安装最新版本 R》一文,手动一个个去解决以上的依赖。

2.1 ssl

python3 需要引用openssl模块,但是 CentOS 需要的 openssl 版本最低为 1.0.2,而 CentOS 默认的为 1.0.1(CentOS-6.x 通过yum源安装的 openssl 的最高版本是 1.0.1),所以需要手动更新 openssl。

# 下载wget http://www.openssl.org/source/openssl-1.1.1.tar.gz

# 解压缩tar -zxvf openssl-1.1.1.tar.gz

# 进入目录安装cd openssl-1.1.1

# 进行配置下,自定义./config --prefix=$HOME/soft-repos/openssl shared zlib

# 编译并安装make && make install

# 配置到用户环境变量,随处使用echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/soft-repos/openssl/lib" >> $HOME/.bashrc

# 是环境变量配置生效source $HOME/.bashrc

请注意:

  1. openssl 编译(config)的时候必须要加上 shared 参数,否者源码安装 Python 即使添加了--with-openssl的自定义路径,依然会导致Could not build the ssl module!报错!

  2. 从https://www.openssl.org/source/下载的源码 openssl-1.0.2s、openssl-1.0.2m,包括 CentOS-7.5 使用yum安装的最高版本的 openssl-1.0.2k 目前发现依然会导致Could not build the ssl module,建议从https://www.openssl.org/source/old/下载 1.1.1 的源码编译安装。

2.2 ctypes

在 CentOS 6.x 安装libffi-devel的时候出现以下问题:

$ yum install -y libffi-develLoaded plugins: product-id, refresh-packagekit, search-disabled-repos, security, subscription-managerThis system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.Setting up Install Processcdrom                                                                                                                                         | 4.1 kB     00:00 ...No package libffi-devel available.Error: Nothing to do

可以使用下面的方法安装:

[root@log01 ~]# rpm -ivh http://mirror.centos.org/centos/6/os/x86_64/Packages/libffi-devel-3.0.5-3.2.el6.x86_64.rpmRetrieving http://mirror.centos.org/centos/6/os/x86_64/Packages/libffi-devel-3.0.5-3.2.el6.x86_64.rpmwarning: /var/tmp/rpm-tmp.V9ihbu: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEYPreparing...                ########################################### [100%]   1:libffi-devel           ########################################### [100%][root@log01 ~]# rpm -qa|grep libffilibffi-3.0.5-3.2.el6.x86_64libffi-devel-3.0.5-3.2.el6.x86_64

源码方法安装如下:

$ wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz$ tar zvxf libffi-3.2.1.tar.gz$ ./configure --prefix=/Bioinfo/Pipeline/SoftWare/LibDependence/libffi-3.2.1$ make $ make install 

2.3 pygraphviz

$ /Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin/pip3 install pygraphvizCollecting pygraphviz  Using cached https://files.pythonhosted.org/packages/7e/b1/d6d849ddaf6f11036f9980d433f383d4c13d1ebcfc3cd09bc845bda7e433/pygraphviz-1.5.zipInstalling collected packages: pygraphviz  Running setup.py install for pygraphviz ... error    Complete output from command /Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-_zdjdg0j/pygraphviz/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-g0mz7lrq/install-record.txt --single-version-externally-managed --compile:    running install    Trying dpkg    Failed to find dpkg    Trying pkg-config    Package libcgraph was not found in the pkg-config search path.    Perhaps you should add the directory containing `libcgraph.pc'    to the PKG_CONFIG_PATH environment variable    No package 'libcgraph' found    Traceback (most recent call last):      File "<string>", line 1, in <module>      File "/tmp/pip-install-_zdjdg0j/pygraphviz/setup.py", line 93, in <module>        tests_require=['nose>=1.3.7', 'doctest-ignore-unicode>=0.1.2', 'mock>=2.0.0'],      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/site-packages/setuptools/__init__.py", line 145, in setup        return distutils.core.setup(**attrs)      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/distutils/core.py", line 148, in setup        dist.run_commands()      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/distutils/dist.py", line 966, in run_commands        self.run_command(cmd)      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/distutils/dist.py", line 985, in run_command        cmd_obj.run()      File "/tmp/pip-install-_zdjdg0j/pygraphviz/setup_commands.py", line 44, in modified_run        self.include_path, self.library_path = get_graphviz_dirs()      File "/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py", line 162, in get_graphviz_dirs        include_dirs, library_dirs = _try_configure(include_dirs, library_dirs, _pkg_config)      File "/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py", line 117, in _try_configure        i, l = try_function()      File "/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py", line 72, in _pkg_config        output = S.check_output(['pkg-config', '--libs-only-L', 'libcgraph'])      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/subprocess.py", line 395, in check_output        **kwargs).stdout      File "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/subprocess.py", line 487, in run        output=stdout, stderr=stderr)    subprocess.CalledProcessError: Command '['pkg-config', '--libs-only-L', 'libcgraph']' returned non-zero exit status 1.

    ----------------------------------------Command "/Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-_zdjdg0j/pygraphviz/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-g0mz7lrq/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-_zdjdg0j/pygraphviz/

参考:《Installation:fatal error: 'graphviz/cgraph.h' file not found

$ wget https://graphviz.gitlab.io/pub/graphviz/stable/SOURCES/graphviz.tar.gz$ tar zvxf graphviz.tar.gz$ cd graphviz-2.40.1$ ./configure --prefix=/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1$ make && make install

推荐把安装好的 graphviz 添加到环境变量,这样可以避免运行过程中出现:"pygraphviz/graphviz_wrap.c:2987:29: fatal error: graphviz/cgraph.h: No such file or directory"  无法找到头文件的异常。

export PKG_CONFIG_PATH=/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib/pkgconfig:$PKG_CONFIG_PATHexport LD_LIBRARY_PATH=/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib:$LD_LIBRARY_PATHexport C_INCLUDE_PATH=/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/include:$C_INCLUDE_PATHexport CPLUS_INCLUDE_PATH=/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/include:$CPLUS_INCLUDE_PATH

如果 graphviz 添加到环境变量,pygraphviz的 python 包可以参考下面的方法安装:

$ /Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin/pip3 install --global-option=build_ext --global-option="-I/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/include" --global-option="-L/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib" pygraphviz/Bioinfo/Pipeline/SoftWare/Python-3.7.3/lib/python3.7/site-packages/pip/_internal/commands/install.py:207: UserWarning: Disabling all use of wheels due to the use of --build-options / --global-options / --install-options.  cmdoptions.check_install_build_global(options)Collecting pygraphviz  Using cached https://files.pythonhosted.org/packages/7e/b1/d6d849ddaf6f11036f9980d433f383d4c13d1ebcfc3cd09bc845bda7e433/pygraphviz-1.5.zipInstalling collected packages: pygraphviz  Running setup.py install for pygraphviz ... doneSuccessfully installed pygraphviz-1.5

2.4 编译安装

第一,下载 Python 源码,解压。

# 官网下载地址 https://www.python.org/downloadswget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgzwget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz

# 解压到指定目录 tar zvxf Python-3.7.3.tgz -C /usr/local/src

第二,进入解压的源码路径,编译 python 源码。

export PKG_CONFIG_PATH=/Bioinfo/Pipeline/SoftWare/LibDependence/libffi-3.2.1/lib/pkgconfig:/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib/pkgconfig:$PKG_CONFIG_PATHexport LD_LIBRARY_PATH=/Bioinfo/Pipeline/SoftWare/LibDependence/libffi-3.2.1/lib64:/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib:$LD_LIBRARY_PATH

$ ./configure \--enable-optimizations \--prefix=/Bioinfo/Pipeline/SoftWare/Python-3.7.3 \--with-openssl=/Bioinfo/Pipeline/SoftWare/LibDependence/openssl-1.1.1 \CC=/Bioinfo/Pipeline/SoftWare/gcc-4.8.5/bin/gcc \CXX=/Bioinfo/Pipeline/SoftWare/gcc-4.8.5/bin/c++ \LDFLAGS="-L/Bioinfo/Pipeline/SoftWare/LibDependence/libffi-3.2.1/lib64 -L/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib" \CPPFLAGS="-I/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/include" \PKG_CONFIG_PATH="/Bioinfo/Pipeline/SoftWare/LibDependence/libffi-3.2.1/lib/pkgconfig:/Bioinfo/Pipeline/SoftWare/graphviz-2.40.1/lib/pkgconfig" 
  • --enable-optimizations是优化选项(LTO,PGO 等)加上这个 flag 编译后,性能有 10% 左右的优化,但是这会明显的增加编译时间。建议使用这个参数;

  • --prefix 声明安装路径;

  • 安装多个 python 的版本,如果不开启--enable-shared,指定不同路径即可。当开启--enable-shared时,默认只有一个版本的 python。

  • python 3 编译可以使用--with-openssl=DIR指定 OpenSSL 安装路径进行编译的方式解决 OpenSSL 依赖,否则make过程可能出错。

$ make ......The following modules found by detect_modules() in setup.py, have beenbuilt by the Makefile instead, as configured by the Setup files:_abc                  atexit                pwdtime

Failed to build these modules:_ctypes               _hashlib              _ssl

Could not build the ssl module!Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

......
  • make过程如果出现 ModuleNotFoundError: No module named '_ctypes '或者 INFO: Could not locate ffi libs and/or headers 的错误提示,参考下面 的解决方法。

  • 如果指定--with-openssl=DIR依然无法解决 ssl 模块的问题,可以参考修改 Modules/Setup.dist 文件(默认这块是注释的,放开注释即可。这块功能是开启 SSL 模块,不然会出现安装完毕后,提示找不到ssl模块的错误),再执行 configure,修改内容如下:

# Socket module helper for SSL support; you must comment out the other# socket line above, and possibly edit the SSL variable:SSL=/usr/local/ssl_ssl _ssl.c \    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \    -L$(SSL)/lib -lssl -lcrypto

第三,Makefile 生后依次在当前路径执行编译和安装命令。

make && make install

第四,安装完成。以上命令执行完毕,且无报错的情况下,我们将默认 python 换将切换至 3.7.3(一般不建议替换,个人建议把自定义安装的 Python bin 路径添加到 PATH 环境变量即可):

# 替换系统自带的 python(不建议)mv /usr/bin/python /usr/bin/python2ln -s /Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin/python3 /usr/bin/python

# 添加新 Python 到 PATH 环境变量(建议)echo "export PATH=/Bioinfo/Pipeline/SoftWare/Python-3.7.3/bin:$PATH" >>~/.bashrcsource ~/.bashrc

运行命令python -V,查看是否出现 3.7.3 的版本,出现即为安装成功。

3. 安装 pip+setuptools

# 下载 setuptools 和 pip 安装程序curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pypython get-pip.py

至此,CentOS Linux release 6.5 下的 python-3.7.3 全部安装完成。如果在安装过程中出现其他的报错,建议把 error 关键信息直接复制到 Google 进行检索,参考其他人的解决方法。


往期精彩:

  • Linux 下的动态库、静态库与环境变量

  • 手把手教你如何在 Linux 上源码安装最新版本 R

  • 非 root 用户手动编译安装 GCC

  • 聊一聊 Python 安装中的 --enable-shared

  • Python 文件与目录操作方法总结

——The  End——

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

生物信息学 Python 入门之源码安装相关推荐

  1. mysql整站源码安装_MySQL入门01-MySQL源码安装

    操作系统:CentOS 6.7 MySQL版本:5.6.30 1.前期准备 首先需要CMake,可以yum直接安装: ``` yum install cmake ``` 也可以官网 https://c ...

  2. [爬虫][python][入门][网页源码][百度图片][豆瓣TOP250]

    Robots协议 查看爬取规则 遵守相关法律法规 Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol) ...

  3. Python之pip源码安装三方库

    当本地linux服务器无法连接外网时,可以通过源码安装的方式安装三方库 1 创建存放库压缩包的目录 mkdir python 2 进入到目录下载所需要的库(以openpyxl为例) cd python ...

  4. 在 Linux 和 Windows 下源码安装 Perl

    Perl 是一种功能丰富的计算机程序语言,运行在超过 100 种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发.在生物信息分析领域,Perl 主要是做数据预处理.文本处理 ...

  5. autoware源码安装与运行ROSBAG示例(二)

    autoware入门教程-源码安装autoware1.12.0 说明:介绍如何安装autoware1.12.0 步骤: 安装系统依赖: $ sudo apt-get update $ sudo apt ...

  6. linux python3.8源码安装_linux 下从源码安装 Python——小白踩坑记

    实验室服务器使用的系统为 Ubuntu 16.04,自带的 python 版本为 Python 2.7.12 和 Python 3.5.2,命令行下使用$ python命令来启动 python 时默认 ...

  7. rpm命令,yum命令,源码安装python

    一.rpm命令 挂载光盘文件到/media目录 进去/media目录下的Packages目录 查看系统已安装的所有rpm包 查看系统是否安装dhcp软件包 安装dhcp软件包 查看dhcp软件包的信息 ...

  8. linux python源码安装,linux上源码安装python

    以下例子基于python 2.7.9,其他版本同理.# 1.下载python# wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tg ...

  9. [完整源码&UI界面&视频安装教程&鸟巢数据集]输电塔绝缘子上鸟巢检测Python&YOLOv5源码

    1.输电塔绝缘子上鸟巢检测Python&YOLOv5 (1)图片检测: (2)视频检测: [项目分享]输电塔绝缘子上鸟巢检测Python&YOLOv5源码哔哩哔哩bilibili (3 ...

最新文章

  1. mac  中 Mach-O
  2. 完整的python项目流程
  3. 黑马lavarel教程---5、模型操作(AR模式)
  4. 【控制】控制学习路线资源整理
  5. java操作Excel之POI(3)
  6. ICCV2021 人脸深伪分析挑战赛 重磅来袭
  7. 华为天才少年一人打造自动驾驶!
  8. 监控、链路追踪、日志的区别
  9. VS2005调试器 1,断点设置有技巧(转载)
  10. VC 运行时库 /MD、/MDd 和 /MT、/MTd
  11. c++分割字符串方法
  12. matlab脑肿瘤识别与分割程序_车牌识别算法
  13. jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
  14. 【Excel】多条件查找
  15. linux awk,sort,uniq,wc,cut命令详解
  16. 多媒体计算机主要有哪些基本特性,多媒体的特点主要包括哪些?
  17. (4M+2)阶魔方阵算法
  18. 【现代遗传学原理-基因和基因组学】
  19. 《Sony Vegas Pro 12标准教程》—— 2.6 添加背景音乐
  20. 任务调度的合理性 (25 分)

热门文章

  1. 如何写出一份优秀的软件设计文档
  2. 被强制007加班!他愤而把加班证据发给国外供应商和大客户!客户纷纷取消订单!他去度假,老板气疯!...
  3. 利用Kafka和Cassandra构建实时异常检测实验
  4. K8s, Kafka事件溯源架构模式和用例示例
  5. 年入50万,程序员众生相
  6. 为什么分布式一定要有一致性方案?
  7. 卡尔曼算法笔记---思想和实际应用物理含义的理解
  8. java学习笔记(2)
  9. 数组-合并两个有序数组(双指针,从后往前)
  10. 使用wmi的snmp类查询计算机网卡信息的源代码,在java中使用SNMP和/或wmi / wmic进行进程到端口的映射...