利用Python的virtualenv

Python的版本众多,很多lib在不同Python版本之间的兼容性不尽相同,之前使用Python时非常苦恼,比如字符编码问题,mysql客户端lib,以及在数据挖掘和量化交易中的工具(如zipline)。虽然现在也有conda能简化这些操作,但是学会virtualenv仍然是Python开发能力发展的必经之路。

virtualenv可以快速解决不同Python项目之间使用不同lib导致的Python版本无法统一问题(比如Project A需要的lib X需要Python2.7,而Project B需要的lib Y需要Python3.5)。而且使用virtualenv非常方便,一旦了解使用方式,之后的Python开发习惯将完全替代原有直接依赖Path中Python版本,以及直接在系统范围内pip install的习惯。

Windows下使用virtualenv

Windows下的Python开发使用virtualenv是很简单的事情,安装使用PyCharm。在创建项目时(New Project),可以选择运行在virtualenv环境下,之后其它操作都不变,利用PyCharm中运行python脚本,以及在项目的控制台(Terminal)中pip install安装lib,都会在创建的virtualenv中运行。不同项目的virtualenv之间互不影响。

Linux下使用virtualenv

在linux环境中(Redhat或CentOS)安装virtualenv

sudo pip install python-virtualenv

创建一个virtualenv

virturalenv EnvName

执行创建env会,会创建一个目录(EnvName),目录结构为

  - bin
  - lib
  - lib64
  - pyvenv.cfg

进入virtualenv环境

source EnvName/bin/activate

退出virtualenv环境

deactivate

Linux中设置virtualenv运行的crontab

可以利用一个run.sh脚本,并在crontab中执行,run.sh内容大致为:

#! /bin/bash

Main()
{
	source ${EnvName绝对路径}/bin/activate
	## 需要执行的脚本内容
	deactivate
}

Main "$@"
exit $?

不要提交virtualenv目录到git

Python的开发使用场景,经常是开发人员在Windows上开发代码,但是通过git发布部署到Linux的服务器上运行,因此,开发人员会习惯性把Python整个项目提交到git上,其中包含了virtualenv。

但这样是有问题的,因为Windows和Linux下的virtualenv目录内容不同,最基本的不同是python执行文件在Windows和Linux上不同,不能跨平台兼容,因此提交git只是提交代码,Linux服务器上的运行环境,单独部署创建virtualenv。