xdays

搭建私有pypi仓库

背景

为了对公司内部的Python库进行统一管理,但出于隐私考虑不能直接放到公共pypi服务器上,故考虑搭建私有pypi仓库。

服务端

安装

安装pypiserver

pip install pypiserver passlib

安装supervisor

apt-get install supervisor

配置

新建package存放目录

mkdir -p /opt/pypi/packages

创建用于上传package的密码

htpasswd -sc /opt/pypi/.htaccess user

新建supervisor配置文件,vim /etc/supervisor/conf.d/pypi.conf

[program:pypi]
directory=/opt/pypi/
command=pypi-server -p 8082 -P .htaccess /opt/pypi ...

IPython自动重新加载模块

问题

调试模块的时候需要不断修改代码,只有重新加载模块才可以看修改效果,而重新加载的方法有reload内置方法和重新运行解释器,这样都不是很方便,我希望修改代码能立刻生效。

解决

IPython有个autoreload扩展,只需要开启扩展并定义扩展的模式即可。

开启扩展

默认的配置位于\~/.config/ipython/profile_default/ipython_config.py,编辑该文件新增:

c.InteractiveShellApp.extensions = ['autoreload']

设定模式

编辑文件\~/.config/ipython/profile_default/ipython_config.py,新增:

c.TerminalIPythonApp.exec_lines = ['%autoreload 2']

这样即可满足需求。

Python实现手机控制PC

背景

最初想法起因是这样的:晚上睡觉前看电视剧看困了就不想起来关电脑了,所以需要通过手机远程在PC上执行命令。

组件

  • 服务端提供接受指令和下发指令的两个API
  • 手机端用Qpython写脚本向服务端提交指令
  • PC端写一个小daemon程序,获取指令并在本机执行

代码

服务端代码

以Django编写,后端用redis存储。

views.py

from django.http import Http404, HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from xbox.control.forms import order
from redis_cache import get_redis_connection
import time
import json

@csrf_exempt
def ...

Python写MapReduce

说明

本文以一个没有Java开发经验的运维角度从宏观上去理解Hadoop的云计算(也就是MapReduce)框架模型的一些思想和运行流程;主要目的是在对MapReduce有一定了解后能用Python通过streaming工具来写MapReduce。

MapReduce工作流程

如下图所示:

MapReduce Flow

概括整个过程如下:

  1. 客户端启动一个作业;
  2. 客户端向JobTracker请求一个job id;
  3. 客户端将运行作业所需的资源复制到HDFS上;
  4. 客户端将作业提交给JobTracker;
  5. JobTracker初始化作业对象,获取输入数据进行拆分作业;
  6. JobTracker与TaskTracker保持心跳,将子作业下发给TaskTracker;
  7. Tasktracker从HDFS获取数据进行MapTask和ReduceTask

具体的流程介绍可参考这篇文章或者《Hadoop权威指南》

Shuffle机制

Shuffle意思是洗牌或搞乱,在整个MapReduce工作流程中Shuffle指的是map开始之后至Reduce完成之前的这个环节。理解其内部运行机制后,你会对那句形容Shuffle的话理解更深刻:排序是Hadoop的灵魂。

具体Shuffle的介绍参考这篇文章,好文,作者分析的通俗易懂,这里鄙人表示感谢。

MapReduce数据流

理解数据流对写MapReduce很重要。总结来说就是:数据始终以key/value形式从input流向output,在input端map有相应的转换方式定义如何将数据转换为key ...

Python语言参考-简介

简介

本参考手册描述了Python语言,它本意并不是一篇教程。

尽管我努力做到尽可能的精确,除了语法和词法分析外我都用英语而不是标准的规范来阐述。这样应该让这篇文档对于普通读者来说更易读,但可能会产生歧义。所以,如果你来自火星,想通过此文档重新实现Python,你可能需要猜测一些东西或者实际上你最终可能实现一种完全不同的语言。另一方面,如果你使用Python,想了解这门语言一个特定方面的准确定义,你应该能从这里找到。如果你想搞明白这门语言更正式的定义,你可能需要奉献你的时间或者发明一台克隆机器。

在语言的参考手册里加入太多实现细节是非常危险的---|实现可能会变,同一语言的不同实现可能运行的完全不同。另一方面,目前广泛使用的只有一种Python实现(尽管存在其他实现),而且其特殊的模式值得一提特别是实现强加了一些限制。因此,你会看到一些“实现要点”散落于文档中。

每种Python实现都有很多其自己的内置模块,这些在Ptyhon标准模块中有说明。一些和语言的定义有重大关系的内置模块会被提及。

替代品

尽管目前最流行的Python实现只有一种,但有一些其他人感兴趣的替代品。

已知的实现包括:

  • Cpython 这是最初也是维护最好的Python实现,以C语言编写,新特性通常先出现在这里。
  • Jython Java语言实现,这个版本可用于Java程序的脚本语言,或者用来借助Java类库创建Java程序。也可以用它给Java类写测试程序。更多信息可以访问Jython主页。
  • Python for .NET 此版本使用Cpython实现,但是一个受管理的应用 ...

vitualenv

简介

virtualenv是用于隔离Python开发环境的工具。

特点

  • 解决依赖同一项目的不同版本问题
  • 没有root权限不能向系统安装包

基本原理

类似chroot的模式,virtualenv在项目目录下创建供python运行的基本系统目录结构,然后把python解释器和pip放到对应的目录下,然后通过修改对应的环境变量来达到执行对应程序的目的。

安装使用

sudo apt-get install virtualenv
virtualenv test
source test/bin/activate
which python;which pip

扩展

  • virtualenvwrapper 一个shell脚本对virtualenv相关命令进行了封装,更容易使用。常用命令如mkvirtualenv,lssitepackages,workon,deactivate等
  • pythonbrew 一个可以不需root权限安装多个版本python环境的工具

参考链接

http://www.virtualenv.org/ http://www.jeffkit.info/2011/08/1012/ http://blogs.360 ...

Python基础语法

特点:

简单易学;自由开源;高级解释型语言;可移植性;面向对象;可扩展;可嵌入;广泛的库支持。

Note: 简单易学却又无比强大,似乎不太符合逻辑。但不管怎么着,就像只有与一个人打交道才能了解一个人一样,既然选择了python,那就在学和用中去体会这门语言的特点吧。

基础:

  1. 字面常量( literal constants ),其值不可改变,就代表它自己。
  2. 数值类型,有四种类型:整数,长整数,浮点数和复数。
  3. 字符串

    1. 引号:单双引号意义一样;三引号可以指定跨行字符串,而且可以穿插单双引号。
    2. 转义字符:在一些字符前加back slash可以构造特殊含义的字符。
    3. 纯字符串,如果在字符串放在引号中前加r或R则是纯字符串,不转义。
    4. 不可修改,字符串不可修改。
    5. 字符串连接,自动连接两个相邻的字符串。
  4. 变量

    1. 定义,内存中的一个片段,给它来个名字,就是变量。
    2. 命名规则,有字母,数字和下划线组成 ...