学习搭建Python环境

赞助

如果你觉得我写得还行,欢迎付费支持。

写了好多年的PHP代码,不免有些许的厌倦,是时候学一门新语言了,这就好比对男人来说,家里的女人看得久了,新鲜感荡然无存,自然想纳几房小妾,不过对于身处河东狮吼险境的我而言,此等美梦注定遥不可及,还是老老实实学编程吧,想当年我还像模像样的学过Python,可惜没坚持下来,希望这次能行。

闲言碎语不要讲,表一表Python的安装,操作系统为CentOS,因为版本旧,加之已经包含了Python-2.4.3,所以我换了一个路径安装了Python-2.7.5,目前此版本比较通用:

shell> wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
shell> tar zxvf Python-2.7.5.tgz
shell> cd Python-2.7.5
shell> ./configure --prefix=/usr/local/Python-2.7.5
shell> make
shell> make install

下面看看包管理工具,原本流行的是setuptools,不过现在它已经被distribute取代,除此以外,easy_install也已经被pip取代,下面让我们看看如何安装:

shell> wget http://python-distribute.org/distribute_setup.py
shell> /usr/local/Python-2.7.5/bin/python distribute_setup.py
shell> /usr/local/Python-2.7.5/bin/easy_install pip

更新:风水轮流转,目前 setuptools 和 distribute 已经合并,以后只有 setuptools 了,而且前面的 python-distribute.org 域名已经掉了,所以最新安装 easy_install 方式如下:

shell> wget https://bootstrap.pypa.io/ez_setup.py -O - | python

更新:以上安装 pip 的方法都过时了,现在用 get-pip.py 来安装。

既然是学习搭建Python环境,那么virtualenv是必须安装的,简单点说,它允许我们创建若干套隔离的Python运行环境,具体介绍可以参考奇虎的文章,让我们安装它:

shell> /usr/local/Python-2.7.5/bin/pip install virtualenv

接下来创建一个完全独立的Python环境FOO:

shell> /usr/local/Python-2.7.5/bin/virtualenv FOO

再看看如何进入环境和退出环境:

shell> source FOO/bin/activate
shell> deactivate

此环境已经包含了pip,通过它安装的程序只存在于自己的环境里,不会污染别人。

怎么样?很好用吧!还能更好用,不过需要借助virtualenvwrapper,通过pip安装,它对virtualenv做了一个包装,一个典型的配置如下:

export WORKON_HOME=/path/to/home
export VIRTUALENVWRAPPER_PYTHON=/path/to/python
export VIRTUALENVWRAPPER_VIRTUALENV=/path/to/virtualenv

source /path/to/virtualenvwrapper.sh

注意:使用virtualenv后,系统里会存在多套Python环境,并且不是通常的缺省路径,所以这就要求我们在写脚本的时候不要使用绝对路径,而应该使用env来增强通用性:

#!/usr/bin/env python

此外,使用virtualenv安装的Python环境都是相同版本的,如果你想安装不同版本,可以考虑使用其他应用,比如:pythonbrewpyenvpythonz等等。

时间的分界线:公元二零一七年…

一眨眼好几年过去了,最近要配置个新的 Python 运行环境,发现以前的知识都已经过时了,所以更新一下,使用 SCL 来安装 Python,使用 venv 取代 virtualenv。

一定要记住,我们是安装新版 Python,而不是升级系统上原有的旧版 Python,否则很多依赖关系可能会被破坏,下面是通过 SCL 来安装软件的典型步骤:

shell> yum install centos-release-scl
shell> yum install rh-python35
shell> scl enable rh-python35 bash
shell> python --version

如此新版 Python 就基本配置好了,再通过 venv 安装一个干净的环境:

shell> python -m venv /path/to/project
shell> source /path/to/project/bin/activate

每次使用前通过 scl 命令激活新版 Python 即可,如果不这样,而是使用绝对路径来访问新版 Python,那么你可能会遇到链接库找不到的问题:

shell> ldd /path/to/project/bin/python
linux-vdso.so.1 =>  (0x00007fffa6333000)
libpython3.5m.so.rh-python35-1.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032a1600000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000032a1a00000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000032a3a00000)
librt.so.1 => /lib64/librt.so.1 (0x00000032a1e00000)
libm.so.6 => /lib64/libm.so.6 (0x00000032a2200000)
libc.so.6 => /lib64/libc.so.6 (0x00000032a1200000)
/lib64/ld-linux-x86-64.so.2 (0x00000032a0a00000)

这是因为 scl 把链接库安装到了自己的目录里,我们想要配置一下:

shell> echo "/opt/rh/rh-python35/root/usr/lib64" >
       /etc/ld.so.conf.d/rh-python35.conf

shell> ldconfig

此时最好再继续配置一下 pip,因为缺省的安装源速度太慢,推荐改成豆瓣的镜像,速度快得不要不要的,这里 show 一个技巧,看怎么找 pip 的配置文件:

shell> strace -eopen pip list

open("/etc/xdg/pip/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/etc/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/root/.pip/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/root/.config/pip/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/etc/xdg/pip/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/etc/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/root/.pip/pip.conf", O_RDONLY|O_CLOEXEC) ...
open("/root/.config/pip/pip.conf", O_RDONLY|O_CLOEXEC) ...

我选择 /etc/pip.conf 作为我的配置文件,编辑内容:

[global]
timeout = 60
index-url = https://pypi.doubanio.com/simple

如上这个搭建 Python 环境的文档基本算跟上时代了,收工!

学习搭建Python环境》上有8条评论

  1. Python rocks 🙂

    Arch Linux 使用的配置参数是:
    ./configure –enable-shared –with-threads –with-computed-gotos –enable-ipv6 –with-valgrind –with-wide-unicode –with-system-expat –with-system-ffi
    Python 3.3 以前的 Unicode 支持分两种,–with-wide-unicode 更全一些(不过没有也应该不会像 Ruby 那样出严重的问题)。–enable-shared 好像是嵌入 Python 解释器的程序需要的。

    另外,部分版本使用 make altinstall 时不会覆盖 python 这个文件(只有 python2.7 之类带版本号的可执行文件)。

  2. 以前也是一直用PHP,换了公司后,用PHP写后端脚本觉得实在太无聊,就拿python练手,感觉也还不错,在与系统结合方面比PHP还要方便一些。还拿python写了个SVN发布脚本,比开发WEB发布系统实在是效率高多了。

  3. centos的话,如果想要替换,还需要修改/usr/bin/yum
    以原有默认安装为python2.4为例
    将#!/usr/bin/python更改为#!/usr/bin/python2.4
    并替换/usr/bin/python和/usr/bin/python-config

    python用起来确实很舒服

  4. Pingback引用通告: 实战Sentry | 火丁笔记

  5. Pingback引用通告: 实战Sentry

发表评论

电子邮件地址不会被公开。 必填项已用*标注