显示标签为“python”的博文。显示所有博文
显示标签为“python”的博文。显示所有博文

2010年7月24日星期六

使用Virtualenv进行多环境开发

在看Flask时,有专门的Virtualenv介绍,为了在多环境下开发,独立其它环境.
如系统中有Flask0.5稳定版,但在測试环境下需要dev, 这样可创建一个dev的虚拟环境,相互之间不影响.

先安装:
$ sudo easy_install virtualenv

配置一个使用Flask-dev(没有正式release的版本)的开发环境,不影响其它环境,取名为env。
$ mkdir flask
$ cd flask
$ virtualenv env
$ . env/bin/activate
New python executable in env/bin/python
Installing setuptools............done.
(env)$ easy_install Flask==dev

这时安装的flask-dev其实是安装在当前环境,进入env/lib看看。
同样可以在不同环境下,使用如不同版本的python等。

2010年7月22日星期四

Python2.6.5不能访问Mysql解决办法

安装ubuntu10.04后,急不可待,安装上python2.6.5(最新版).
再安装上mysql : sudo apt-get install mysql-server-5.1
安装Mysql-python-1.2.3.
>import MySQLdb
报错: libmysqlclient.so.15找不到.

但是在/usr/lib/下,执行: ls libmysql*,发现有libmysqlclient.so.16,于是把16作一个连接符号到15上.发现还是有错.

10.04上已经没有15,只有16,而Mysql-python只使用15,使用ldd可看出
/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.3c1-py2.6-linux-i686.egg$
ldd _mysql.so
linux-gate.so.1 => (0x0095c000)
libmysqlclient_r.so.15 => /usr/lib/libmysqlclient_r.so.15 (0x00653000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x003e5000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0x008d4000)
libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0x0026a000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00293000)
libz.so.1 => /lib/libz.so.1 (0x00365000)
/lib/ld-linux.so.2 (0x00df7000)

所以还是要找到15装上.

使用: libmysqlclient15off, 解决问题,下载地址:
http://packages.ubuntu.com/karmic/i386/libmysqlclient15off/download
文件:libmysqlclient15off_5.1.30really5.0.83-0ubuntu3_i386.deb
安装后,再到/usr/local/lib下,输入: ls libmysql*,有了:
libmysqlclient.a libmysqlclient_r.so.15.0.0 libmysqlclient.so.16
libmysqlclient.la libmysqlclient_r.so.16 libmysqlclient.so.16.0.0
libmysqlclient_r.a libmysqlclient_r.so.16.0.0 libmysqlpp.a
libmysqlclient_r.la libmysqlclient.so libmysqlpp.so
libmysqlclient_r.so libmysqlclient.so.15 libmysqlpp.so.3
libmysqlclient_r.so.15 libmysqlclient.so.15.0.0 libmysqlpp.so.3.0.9


再运行import MySQLdb,一切正常.

2010年6月20日星期日

下载tornado

翻墙后下载tornado有问题,所以安装了git,找到源码托管地址,下载:
git clone git://github.com/facebook/tornado.git tornado

呵呵!其他的就简单了:
cd tornado
python setup.py build
sudo python setup.py install

2010年1月22日星期五

win下安装mako

这段时间一直捣鼓web.py, 感觉其模板也不错,简单易用,但其性能太差,邮件列表中推荐mako比较多。安装时出现错误,setuptools找不到,说明少安装了这个东西,2话不说下载安装。
http://pypi.python.org/pypi/setuptools 要翻墙,自备梯子。
再下载mako,安装。

若你使用了sygwin,可以sh到sygwin下,运行对应版本(一下步骤linux同)安装:
#sh setuptools-0.6c11-py2.5.egg
再安装mako:
#python setup.py install

2009年8月22日星期六

利用ln来切换python版本

ubuntu安装时,一般默认安装python2.5,我们在实际使用中一般采用2.6或3,这就需要切换版本。这里以安装一个2.6版本为例说明。

安装python后(2.5和2.6)存在于/usr/bin和/usr/local/bin,在usr/bin下有个python这是指向python2.5的,系统安装时设置,在此不修改此指向。在/usr/local/bin下也有python、python2.5、python2.6,在输入python后,系统会先搜索local/bin,所以修改这里的连接就可以了。local/bin下的python其实就是2.6,可以rm -f python,若想要使用2.5:
$>sudo ln -s python2.5 python
使用2.6:
$>sudo ln -s python2.6 pyhton
以后输入pyhton就是设置后对应的pyhton版本。

还有种办法不做任何修改,就是指定版本:
$>python2.5
$>python2.6

2009年4月10日星期五

java socket

为了测试用,服务端返回客户输入的信息(回送),quit为退出,调试python socket。

//===========SMain.java
public class SMain {
public static void main(String[] args) {
new Thread(new SListener()).start();
}
}

//===========SListener.java
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.ServerSocket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class SListener implements Runnable {

public SListener() {
}

public void run() {
BlockingQueue blockingQueue = new ArrayBlockingQueue(
50);
ExecutorService serverPool = new ThreadPoolExecutor(5, 50, 30,
TimeUnit.SECONDS, blockingQueue,
new ThreadPoolExecutor.DiscardPolicy());

ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(7777);
serverSocket.setSoTimeout(30 * 60 * 1000);
} catch (IOException e) {
e.printStackTrace();
return;
}

while (true) {
try {
serverPool.execute(new Sprocessor(serverSocket.accept()));
} catch (InterruptedIOException iioe) {
continue;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

//===========Sprocessor.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Sprocessor implements Runnable {
private final Socket socket;

public Sprocessor(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
System.out.println("接受到请求");

PrintWriter out = null;
BufferedReader in = null;
try {
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
String cmd;
while (true) {
cmd = in.readLine();
if (cmd.equals("quit")) {
break;
}
out.write(" " + cmd);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null)
in.close();
} catch (Exception e) {
}
try {
if (out != null)
out.close();
} catch (Exception e) {
}
try {
if (socket != null)
socket.close();
} catch (Exception e) {
}
}
}
}

//=========python client
import socket
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.connect(('localhost',7777))
ss.send("aaa\n")
data = ss.recv(1024)
print data
ss.send("quit\n")

2009年4月9日星期四

安装json的python包

json(http://json.org)以其高效(相对XML)编码、简洁明了,使用越来越广。
python也非常不错,要想在python中使用,先下载json包,下载地址:http://sourceforge.net/projects/json-py
有些介绍:http://docs.python.org/library/json.html

把压缩包里的json.py、jsontest.py、minjson.py复制到/usr/lib/python2.5,也可以放到自己的开发目录下。

2009年4月7日星期二

apt-get惹的祸

想升级python,一不小心apt-get remove python,眼一花[yes],这个悔啊......
害得我重新apt-get install ubuntu-desktop,花了一个多小时,还好可以了。

2008年12月25日星期四

在linux下安装MySQLdb

想试用一下django,使用到mysql,需要安装MySQLdb模块,才能访问数据库,linux是ubuntu。

1 下载:http://sourceforge.net/project/showfiles.php?group_id=22307
下载的文件为:MySQL-python-1.2.2.tar.gz

2 安装
先安装一个包(就这个问题把我折磨半天):
#sudo apt-get install libmysqlclient15-dev

#tar zxvf MySQL-python-1.2.2.tar.gz
#cd MySQL-python-1.2.2
#vi site.cfg
在安装libmysqlclient15-dev时会产生一个文件mysql_config,需要在此配置文件里指明(去掉前面的注释,把值设为下面的值):
mysql_config = /usr/bin/mysql_config

#sudo python ./setup.py build
#sudo python ./setup.py install
完成。

3 试用一下
#python
Python 2.5.2 (r252:60911, Oct 21 2008, 19:50:08)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

一切OK!!!

4 补记
我估计另外一种安装可能更方便。
#sudo apt-get install libmysqlclient15-dev
#sudo apt-get install python-mysqldb
一开始就apt-get安装python-mysqldb,装完后却不能用,可能是由于没有安装libmysqlclient15-dev有关。
所以就转到源码安装,也错误一堆,现在想想都是没有安装libmysqlclient15-dev引起的。按照上面的步骤安装好后,可以使用了,就没有尝试apt-get install python-mysqldb是否也好使,你可以试试apt-get安装,若不行的话,转到源码安装。


没想到一个小安装问题,花了4个小时,网上的一些类似问题眼花缭乱,但适用的不多,但有时能寻到一些蛛丝马迹,就是费时。

2008年11月16日星期日

nginx+fastcgi+django的一次尝试

早有耳闻nginx,现在试用一下。我的机器ip为10.0.40.83,就在一台机器上测试,多台机器也是一样。

1. 安装nginx
在公司的机器是win,所以就在win下安装nginx。若果你在linux下安装过如lighttpd,过程是一样的,并没有太多的差异。OS因素是次要,实际生产环境要使用linux。
到http://nginx.net/,下载nginx-0.6.32-win32-setup.exe。后面......

2. 安装django1.0以及flup1.0
下载这2个软件,找到setup.py脚本,python setup.py install或python setup.py即可安装。当然要先要安装python,并配置好python环境变量。

3.创建工程
在D:\software\django\sites\下创建一个django工程mysite,如:pwd/django-admin.py startproject mysite
在mysite里添加一个py文件first.py

from django.http import HttpResponse
def index(request):
return HttpResponse('first django page .....')

修改url.py,在patterns里添加:
(r'^mysite/$','mysite.first.index')

4. 配置nginx
在nginx安装目录下,一般在C:\nginx\conf下,修改nginx.conf文件,关键几点如下:

worker_processes 2;#开2个nginx进程,在任务管理器可以看到这2个子进程和一个nginx主进程,一般按CPU数配置,我的习惯是2*CPU(核)数
events {
worker_connections 64;#每个进程链接队列长度,可按实际设置
}

http {
... #省略其它配置

#和后端的2个fastcgi 服务通讯,注意fastcgi ,后面用到,weight是权重
upstream fastcgi {
server 10.0.40.83:8051 weight=1;
server 10.0.40.83:8052 weight=1;
}

server {
listen 80;
server_name localhost;

...#省略其它配置

location / {
# 指定 fastcgi 的主机和端口,这里的fastcgi指的是上面的upstream
fastcgi_pass fastcgi;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}

...#省略其它配置
}

...#省略其它内容

}

4. 运行
运行nginx(administrator用户),在开始菜单里。
运行2个fastcgi服务,开2个cmd窗口,在mysite目录下:
python manage.py runfcgi host=10.0.40.83 port=8051 method=threaded daemonize=false
python manage.py runfcgi host=10.0.40.83 port=8052 method=threaded daemonize=false

http://10.0.40.83/或http://127.0.0.1/或http://localhost/可以看到输出结果。

5. 破坏尝试
开2个fastcgi的cmd窗口,终止其中一个访问看看,其实没有任何影响。
再把运行的停止,停止的启动看看,还是能访问。
若2个都终止,发现不能访问。
在测试过程中注意C:\nginx\logs下的log的输出信息。


nginx没有多少文档,只能看一些只言片语。有几个比较不错的参考文章。
张宴的一个ppt: 使用Nginx轻松实现开源负载均衡,其blog地址为:http://blog.s135.com/index.php
http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/
http://nginx.net/
http://sysoev.ru/en/
其它的在网上google吧,总会有点的。

2008年11月4日星期二

python访问mysql

import MySQLdb

#host,user,password,dbname
cxn = MySQLdb.connect('10.0.32.83','devuser','devuser1234','supplier_site')
cur = cxn.cursor()
cur.execute('select * from findex limit 0,100')
for rs in cur.fetchall():
print rs

安装MySQLdb模块,参看:

在linux下安装MySQLdb

2008年10月15日星期三

start on python

python一个不错的语言,早在2002年一个朋友(我的领导)在捣鼓这个,还想强拉威逼入伙,被我言辞拒绝。当时刚毕业不久,还在啃java,为了servlet、jsp等初级问题头痛不已。当时对python发自内心无理由、非理智得非常不削,认为java是第一位的,其它语言一切不重要。当时还无端鄙视一个要转学.net的家伙。

哎!时过境迁,居然现在我也python ......

在2006年开始听说ruby,一时冲动,于是拿起ruby看得起劲,但非常喜欢,我不是因为rails而喜欢ruby。对着电脑看《ruby programming》,仔细看了2-3遍,第一次看见真正的完全OO语言,接触到java语言里没有的奇技淫巧。但由于一直没有实践机会,所以rails没看完只记得其非常轻便自然、OR强大,由于我不懂js(只知道check等),还能写出ajax,rjs为最爱,还有点就是url的设计非常易于程序员理解。

2008年疲惫的离开呆了5年的创业型公司,进入一家互联网公司,突然想起我因该再学一门语言,将来或许能做个网站,java在网站迅速开发上还有待改进,并已经厌倦java。于是就对比rails和django(我这人有个习惯,就是先看看网上的口水)。看到大量的VS(语言框架的都有),是人就迷惑,本来就是2种简单语言(哲学不同)、2个相似的框架(哲学相同),偏要掐得你死我活,相互辱骂。

其实影响的我最后选择的原因全是外部非理智的:
1. Youtube
2. douban
3. google的大力支持(app engine)
4. 语言排名(python一直很平稳,势头缓慢上升,逼近第二集团)


一些资源:
《Div into Python》电子档或在线看看
《python核心编程》也有电子档,由于该书出现人品纠纷,电子档也释放出来,自己google吧
python www.python.org
django http://docs.djangoproject.com/en/dev/
有一点python小品 http://www.ibm.com/developerworks/cn/linux/theme/python/index.html
python 论坛里有价值的东西并不多,如javaeye