本文讨论的前提是 Linux 系统下的非 root 权限的多版本, 多项目的 Python 环境配置.
root 权限下, Python 使用出现报错, 那可以 google 对应的错误, 大多数情况下可以找到解决方法;
如果不在系统版本的 Python 下进行开发, 那编译安装所需版本的 Python 就在所难免, 但一定要记住, 不要试图替换当前系统的 Python 版本, 想都不要想, 否则系统可能都会不工作了(血的教训);
实际开发中, 如果项目 1 使用 Python 2.7.12, 项目2 使用 Python 3.6.0, 就得每个都得编译一遍, 还要在跑代码时候, 记得指定具体的路径, pip 时候一定要确认是对应的项目下, 总之, 会有很多坑.
而 Python 多版本依赖工具就可以将上述的问题做最大的简化, 本文也是在解决上面坑的时候积累得到的.
本文主要使用的工具是 pyenv, virtualenv, Anaconda, 但不会讲解每个具体怎么用, 因为官方文档已经很详细了, 而且一直在更新.
阶段一
之前 Python 项目开发, pyenv 主要是做 Python 多版本管理, virtualenv 是做项目版本管理, 项目开发的也是顺利.
但随着做的项目多了, 还是会遇到些问题. 比如有些服务器, 管理员只是安装了系统必需的包, 那么非 root 权限下 pyenv 安装某些版本的 Python , 如果它依赖系统的包(gcc, bzip2, mkl 等等)不存在的话, 除非要 root 权限安装, 否则安装的 Python 版本会有问题. 具体可以看 wiki. 实际项目中, 我们开发的项目需要 SciPy, 但所在的服务器没有 BLAS, 安装时会提示
这个时候就只能去联系服务器管理员了, 或者手动编译 BLAS 到自己的路径下.
阶段二
后来被同事安利了 Anaconda, 发现它可以解决系统包的问题, 实际上, 是 Anaconda 把大部分科学计算包都集成到自己的环境中了.
我主要做数据处理,开发相关的工作, 所以现在的 Python 开发处理流程, 大体是这样的.
- 先安装
pyenv, 主要用于后面的Python,Anaconda等版本控制. pyenv安装Anaconda.Ananconda安装需要的Python版本.- 到对应的
Python版本下,pip安装virtualenv. - 到项目路径下, 使用
virtualenv安装项目的Python环境. source到当前项目环境下,pip安装需要的package.deactivate退出项目的虚拟环境.
好处是解决了阶段一面临的问题, 但不好的地方是, 会安装一些可能项目永远也用不到的 package.
安装步骤实例
安装 Anaconda
Anaconda: 基于Python的科学工具包
安装方式有两种:
- 官网下载安装包
- 通过 pyenv 安装(推荐)
安装 pyenv
pyenv: 多 Python 版本管理工具
|
|
pyenv 下安装 Anaconda
|
|
这时, 在当前的路径下, 输入 python 进入交互环境, 实际是上面的 Python 3.6.
配置项目环境
对每个 Python 项目, 推荐单独设置项目级别的虚拟环境, 好处是每个项目独享某个版本的 Package, 不会因为受到其他项目的影响. 实际操作如下
|
|
总结
基于 Python 开发也主要是上述两个阶段, 阶段一主要是 web 项目, 阶段二是数据计算相关的处理,
熟悉上面的流程, 大体就可以在 Python 的各版本, 各项目中自由穿梭了.