python安装虚拟环境和一些例子分享

2016 / 01 / 16 python

安装virtualenv

python用pip安装的包和类库都是直接安装在全局环境的,这做法就跟java把你用过的所有jar包都放在系统path一样,长期工作下去累计的类库越来越多,交叉依赖,版本冲突啥的随之而来。
virtualenv就是为了解决这个问题的,在每个新项目都使用一个不同的虚拟环境,项目中所有的包都安装在这个虚拟环境之下,和全局无关,使用起来库结构简洁清爽。

sudo pip install virtualenv

新建安放虚拟文件的目录pv,在目录里面新建python虚拟环境,环境名为pv

mkdir pv
cd pv
virtualenv --no-site-packages pv

进入到pv虚拟环境

source pv/bin/activate

退出

deactivate

安装依赖

导出:
pip freeze > requirements.txt   # 导出项目依赖的包到requirements.txt文件
批量安装:
pip install -r requirements.txt  # 从依赖文件,批量安装包.

做接口测试

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

url = "http://localhost:8080/ESB/INFORMANAGE/INFORMANAGESERVICE/inforrelease"
header={
  'content-type':'application/json; charset=utf-8',
  'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
}
param= {
        "msghead": {
            "authcode": "123",
            "devno": "123",
            "reqsn": "123",
            "servicename": "inforrelease",
            "signData": "123",
            "tranchannel": "123",
            "trandatetime": "1923",
            "version": "v1.0"
        },
        "msgreq": {
            "content": "123",
            "endTime": "123",
            "hasRead": "123",
            "ids": ["123"],
            "imglist": ["123"],
            "shouldPay": "123",
            "startTime": "123",
            "title": "123",
            "type": "123",
            "userId": "123"
        }
    }
s = requests.post(url,json=param,headers = header)
print s.text.encode('utf-8')

做爬虫

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by tianjun on 16/2/21

import requests
from bs4 import BeautifulSoup
import blog
begin_url = "http://www.omgif.net/"
headers = {
    "Referer": "www.omgif.net",
    'Connection':'keep-alive',
    'Host':'www.omgif.net',
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
}


def parse(url):
    s = requests.get(url, timeout=5,headers=headers)
    bs = BeautifulSoup(s.text, "lxml")
    for contain in bs.find_all(class_="post-container"):
        b = blog.blog()
        b.type="2"
        b.site = "omgif"
        b.content_id = contain.contents[1]["id"]
        if contain.h2 is not None:
            b.title = contain.h2.a.string.encode('utf-8')
            b.detail = contain.h2.a["href"]
        imgContent = contain.img
        b.img = imgContent["src"]
        b.mp4 = imgContent["data-gif"]
        if not b.hasContent():
            b.save()
            print "新增一条记录",b.content_id
        else:
            break
    return bs.find(class_="archive-nav").a['href']


def init():
    url = begin_url;
    for i in range(0, 10):
        url = parse(url)
        print url

if __name__ == '__main__':
    init()
import urllib
import urllib2
cookies = "lzstat_uv=36646143701674066401|3239393; JSESSIONID=AA3A6FEE4AF7E7878218583316BBC9B4; l=Ap6eJnEdnxIiW7Ybwfnsex2lbj7gDmLb; visitState=pc; CNZZDATA30063739=cnzz_eid%3D2009472116-1453958417-%26ntime%3D1453982370; CNZZDATA30073553=cnzz_eid%3D51683217-1453956930-%26ntime%3D1453981617; lzstat_ss=978823405_1_1454014976_3239393; MIIEE_JTOKEN=02978316089138388698541186051443227222067695111036";
url = "http://www.miiee.com/interface/dresslist.htm?_=04511898399796337";
values = {'n' : '1',    
          'p' : '1',     
          'jtoken' : '02978316089138388698541186051443227222067695111036' }    
headers = { 'Cookie' : cookies }
data = urllib.urlencode(values) 
req = urllib2.Request(url, data,headers)
response = urllib2.urlopen(req) 
the_page = response.read();
print the_page
print response.info()
print response.geturl()

一些技巧

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:


def normalize(name):
    return name[0].upper() +name[1:].lower()

L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
from functools import reduce

def prod(L):
    return reduce(lambda x,y: x*y,L)

print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))

常用类库