Python 开发环境初始化配置



本文介绍在 Linux环境下, Python 环境开发需要配置的内容, 包括 python3 安装, virtualenv 配置, pip 等.

1. 源码安装 python3

  1. 首先去官网找到 source 地址, Python Source Releases, 以当前最新版本 Python3.6.1 为例, 打开该版本地址 Python 3.6.1

  2. 选择第一个源码包, 在 Linux 系统上使用 wget 下载.

     wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz ![e476766683cf5d13c0d14b77d3462fd2](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/attach/1563/e476766683cf5d13c0d14b77d3462fd2)
    
  3. 解压缩, 编译安装 Python3, 安装需要用到 sudo 权限, 提前切换成有 sudo 权限的用户.

tar -zxvf Python-3.6.1.tgz
cd cd Python-3.6.1
./configure && make && sudo make install

安装完成后, terminal 中输入 python3 就能打开解释器

$python3
Python 3.6.1 (default, Apr  6 2017, 20:09:12)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

2. 安装包管理工具 pip

2.1 pip 介绍

pip 之于 Python, 好比 mvn 之于 Java, npm 之于 NodeJS.

好消息是, 如果你使用最新的 Python3 或者 Python2(Python 2 >=2.7.9 or Python 3 >=3.4), 系统默认已经安装了 pip.

比如上面安装的 Python3, 我们很快找到 pip 的路径:

$which python3
/usr/local/bin/python3

cd /usr/local/bin

$ls pip*
pip3  pip3.6

2.2 pip 手动安装

为了兼容 Python 老版本, 介绍下安装 pip 的步骤, 同样需要使用 sudo 权限:

wget https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py

3. 配置 Python 执行环境 virtualenv

在开发Python应用程序的时候, 如果不同项目使用的 Django 版本不同, 第三方的包都会被pip安装到的site-packages目录, 会导致相互覆盖, 因此用到 Python 环境管理器 virtualenv 解决.

virtualenv 主要解决如下问题:

  1. 不同项目使用不同版本的包, 相互独立
  2. 安装包, 不需要 sudo 权限

3.1 区分 pyenv pyvenv virtualenv

首先理解 3 个容易混淆的概念:

  1. pyenv 这是一个python 版本安装器, , 详情见官网说明. 比如本文 Python3.6.1 可以使用该工具进行安装:

     pyenv install 3.6.1
    
  2. pyvenv

    Python3.3 集成到标准库中的虚拟环境管理器, 放目的是将来替代 virtualenv (参考 PEP405), 但是不支持低版本的 Python, 当前功能不是非常完善.

  3. virtualenv

    本地新建目录, 将系统 Python 环境完整拷贝过来, 保持每个 python 环境的独立性.

3.2 virtualenv 使用介绍

  • 首先, 安装 virtualenv
sudo pip3 install virtualenv
  • 然后, 创建一个独立的 Python 环境, 给项目使用, 比如命名 great_python3_env
virtualenv great_python3_env

Using base prefix '/usr/local'
New python executable in /home/admin/git/great_python3_env/bin/python3.6
Also creating executable in /home/admin/git/great_python3_env/bin/python
Installing setuptools, pip, wheel...done.

如果不需要当前环境的包, 使用 virtualenv nowamagic_venv --no-site-packages 进行安装

  • 最后, 激活该环境, 也可以将如下命令添加到 ~/.bashrc 或者 ~/.zshrc
source great_python3_env/bin/activate

(great_python3_env)

这样你就拥有了项目独立占用的 Python 环境, 由于刚才是 pip3 安装的 virtualenv, 因此生成的环境也是基于 Python3 的. 命令行测试如下:

$which python
~/git/great_python3_env/bin/python

可见 python 命令已经指向到了该环境中的 python, 同样, 该环境下使用 pip 命令安装, 也会安装到 ~/git/great_python3_env/lib/python3.6/site-packages/ 中.

3.3 退出 virtualenv 环境

使用 deactivate 退出当前环境

deactivate

4. 总结

以上就是 Python 开发前的环境准备工作了, 简单整理如下:

# 1. 源码安装
mkdir ~/git && cd git
wget wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
tar -zxvf Python-3.6.1.tgz
cd Python-3.6.1
./configure && make && sudo make install

# 2. 手动安装 pip
wget https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py

# 3. 初始化 virtualenv 环境
sudo pip3 install virtualenv
virtualenv great_python3_env
source great_python3_env/bin/activate

# 4. 添加到 .bashrc
echo 'source ~/git/great_python3_env/bin/activate' >>  ~/.bashrc

# 5. 退出 virtualenv
deactivate

5. 参考文档

  1. Pic 原地址
  2. pyenv Github
  3. python-pyenv-pyvenv-virtualenv-whats-the-difference
  4. VENV 文档
  5. PEP405
  6. pyvenv_vs_virtualenv

阅读全文 »


Java 登录 Linux 并执行命令



测试工程中验证数据表, 为了省事, 直接登录到 Linux 执行命令 mysql -u -p xx -e 'select * from xx' 获取输出的内容.

阅读全文 »


Python 库 Pexpect



使用 Python3 编码时, 不可避免的会调用到系统命令, 一般会使用

os.open
os.system
subprocess.call
commands

常用的库, 如果涉及到登录到其他系统上操作某指令, 以前会撸一个 shell 脚本, 调用 epxect xx.sh 来执行.

Violent Python 书中发现作者用的是 Pexpect 库, 挺有意思的, 分享一下.

1. 简介

Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块, 可以和 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。

安装

pip install pexpect

测试一下:

>>> import pexpect
>>> pexpect.run('ls -a')
b'.\t..\ttest.py\r\n'

2. 使用

pexpect 提供了两个类来调用系统命令 run() 和 spawn(), 推荐使用后者.

2.1 run() 函数

如上面的测试例子, run()函数的输出和 os.system() 命令非常相似, 比较高级的是, pexpect.run() 能获得 sys.out 输出内容以及命令的退出状态

>>> output, status = pexpect.run('ls /', withexitstatus=1)
>>> status
0
>>> output
b'Applications\t\t\tUsers\t\t\t\tdata\t\t\t\tinstaller.failurerequests......\r\n'
>>>
## 不存在的目录
>>> output, status = pexpect.run('ls /DirNotExits', withexitstatus=1)
>>> status
1
>>> output
b'ls: /DirNotExits: No such file or directory\r\n'

阅读全文 »


一张打折卡引发的精度思考



1. 背景

在验证网商营销平台时, 发现一个奇怪的打折卡

Screen_Shot_2016-08-10_at_21.46.55

经排查, 服务端返回的是打折卡额度分别是 0.39, 0.49, 前端数值乘以 10 进行展示, 0.39 * 10 = 3.9000000000000004, 在浏览器演示如下:

Screen_Shot_2016-08-10_at_21.51.00

很明显是 Javascript 浮点运算精度问题, 那么为什么两个运算结果一个正常, 一个这么不正经呢?

阅读全文 »


Vim 一键配置



配置Vim

wget https://os.alipayobjects.com/rmsportal/gEYbNstsudEJKZn.js  -O vim.sh && sh vim.sh && rm vim.sh

阅读全文 »