Python避坑指南

在生物信息学领域,Python是最常用的编程语言之一,具有语法简洁、可读性好、模块丰富、以及编程社区活跃等优点。不过,因为它语句灵活和程序包庞大,即使是有一定经验的程序员,在应用中也可能会遇到一些问题。在本文中,我分享一些平时为了数据分析,在Xubuntu上作为系统管理员配置和使用Python的经验,希望能够对读者有所帮助。以后我会逐渐增加内容。

迟任有言曰:“人惟求旧,器非求旧,惟新。”
                                                               ——《尚书·盘庚(上)》

  1. 稳定高于尝新:至少,当我们的首要目标是数据分析的结果,而不是算法的具体实现时,这条被商王盘庚引用的名言并非上策。我们知道,每隔一段时间,Python的开发团队就会推出新的主要版本。新版本固然会带来创新并且解决一些遗留问题,但是,它在安装和使用现有函数包(package)的时候,可能会遇到新问题,耽误科研的时间。例如,为了使用ARIBA软件,我曾经试图在最新的Python 3.8.0版本下,用Cython 0.29.14编译pysam函数包。结果在耗费了大半天时间并失败了无数次后,才确信这是一个版本兼容性问题(GitHub Issue)。回到Xubuntu 18.04默认的Python 3.6.8版本,函数包一次编译成功。其实,ARIBA软件的开发者并没有指出,不同的Python 3子版本会影响程序的输出。所以,作为普通用户的我大可不必为它采用最新的Python版本。为了保证科研项目的进度,应该首选那些在行业里已经被长期使用的稳定软件版本。这样可以避免潜在的、与项目无关的未知问题。

  2. 在多Python版本共存的情况下,隔离不同版本的函数包:在我的Linux主机上,运行着Python 3.6.8(系统的默认版本)和3.8.0两个版本。由于使用不同版本的Python编译的函数包可能存在版本兼容性问题,在使用python -m pip install命令安装函数包的时候,我会根据当前的Python版本增加--target或者--install-option="--prefix="参数来指定目标文件夹。另外,在通过module load命令加载特定版本的Python时,我通过设置PYTHONPATH环境变量来控制Python搜索函数包的路径顺序,从而达到隔离不同Python版本下的函数包的目的。这种设置在实践中取得了令人满意的效果。