NERD_commenter——VIM批量注释与反注释插件

这是对程序员非常实用的一款插件,支持多种语言的补全,还支持单行注释,批量注释,等各种命令映射。

使用方法,先下载该插件:http://www.vim.org/scripts/script.php?script_id=1218

将NERD_commenter.vim文件放到~/.vim/plugin目录下,将NERD_commenter.txt文件放到~/.vim/doc目录下。

然后使用<leader>cc快捷键进行注释选中的行,<leader>cu进行反注释。

其中<leader>是键盘映射,默认情况下是反斜杆“”,则上述快捷键分别为:cc和cu。你可以使用命令自定义,例如命令:let mapleader=”,”将<leader>定义为”,”键。

还有不懂的使用:help NERDCommenter命令查看帮助。

PHP导出Excel

PHPExcel是一个用PHP写的开源的相当强大的 MS Office Excel 文档生成类库。

下面给出一个例子,有编程基础应该可以根据这个例子举一反三。

首先,先下载PHPExcel( http://www.phpexcel.net )。国外的网站速度比较慢的话可以到这里下载:http://u.115.com/file/clgk4q5t

下载解压后,将Classes目录里的内容上传到你的服务器上。然后新建一个文件saveas_excel.php,与Classes目录里的文件处于同一目录中。

saveas_excel.php内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
<?

//设置PHPExcel类库的include path

//set_include_path('.'. PATH_SEPARATOR .

// 'D:ZealPHP_LIBS' . PATH_SEPARATOR .

// get_include_path());

/**

* 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要

* 打开对应行的注释。

* 如果使用 Excel5 ,输出的内容应该是GBK编码。

*/

require_once 'PHPExcel.php';

// uncomment

require_once 'PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls

// or

////require_once 'PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式

// 创建一个处理对象实例

$objExcel = new PHPExcel();

// 创建文件格式写入对象实例, uncomment

$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用于其他版本格式

// or

////$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式

////$objWriter->setOffice2003Compatibility(true);

//*************************************

//设置文档基本属性

$objProps = $objExcel->getProperties();

$objProps->setCreator("Zeal Li");

$objProps->setLastModifiedBy("Zeal Li");

$objProps->setTitle("Office XLS Test Document");

$objProps->setSubject("Office XLS Test Document, Demo");

$objProps->setDescription("Test document, generated by PHPExcel.");

$objProps->setKeywords("office excel PHPExcel");

$objProps->setCategory("Test");

//*************************************

//设置当前的sheet索引,用于后续的内容操作。

//一般只有在使用多个sheet的时候才需要显示调用。

//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0

$objExcel->setActiveSheetIndex(0);

$objActSheet = $objExcel->getActiveSheet();

//设置当前活动sheet的名称

$objActSheet->setTitle('测试Sheet');

//*************************************

//设置单元格内容

//

//由PHPExcel根据传入内容自动判断单元格内容类型

$objActSheet->setCellValue('A1', '字符串内容'); // 字符串内容

$objActSheet->setCellValue('A2', 26); // 数值

$objActSheet->setCellValue('A3', true); // 布尔值

$objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式

//显式指定内容类型

$objActSheet->setCellValueExplicit('A5', '847475847857487584',

PHPExcel_Cell_DataType::TYPE_STRING);

//合并单元格

$objActSheet->mergeCells('B1:C22');

//分离单元格

//$objActSheet->unmergeCells('B1:C22');

//*************************************

//设置单元格样式

//

//设置宽度

$objActSheet->getColumnDimension('B')->setAutoSize(true);

$objActSheet->getColumnDimension('A')->setWidth(30);

$objStyleA5 = $objActSheet->getStyle('A5');

//设置单元格内容的数字格式。

//

//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,

//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的

//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode

//为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要

//修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,

//在 if ($this->_BIFF_version == 0×0500) { (第363行附近)前面增加一

//行代码:

//if($ifmt === '0') $ifmt = 1;

//

//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字

//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容

//都按原始内容全部显示出来。

$objStyleA5

->getNumberFormat()

->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

//设置字体

$objFontA5 = $objStyleA5->getFont();

$objFontA5->setName('Courier New');

$objFontA5->setSize(10);

$objFontA5->setBold(true);

$objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);

$objFontA5->getColor()->setARGB('FF999999');

//设置对齐方式

$objAlignA5 = $objStyleA5->getAlignment();

$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

//设置边框

$objBorderA5 = $objStyleA5->getBorders();

$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objBorderA5->getTop()->getColor()->setARGB('FFFF0000'); // color

$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//设置填充颜色

$objFillA5 = $objStyleA5->getFill();

$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);

$objFillA5->getStartColor()->setARGB('FFEEEEEE');

//从指定的单元格复制样式信息.

$objActSheet->duplicateStyle($objStyleA5, 'B1:C22');

//*************************************

//添加图片

$objDrawing = new PHPExcel_Worksheet_Drawing();

$objDrawing->setName('ZealImg');

$objDrawing->setDescription('Image inserted by Zeal');

$objDrawing->setPath('./zeali.net.logo.gif');

$objDrawing->setHeight(36);

$objDrawing->setCoordinates('C23');

$objDrawing->setOffsetX(10);

$objDrawing->setRotation(15);

$objDrawing->getShadow()->setVisible(true);

$objDrawing->getShadow()->setDirection(36);

$objDrawing->setWorksheet($objActSheet);

//添加一个新的worksheet

$objExcel->createSheet();

$objExcel->getSheet(1)->setTitle('测试2');

////保护单元格

$objExcel->getSheet(1)->getProtection()->setSheet(true);

$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');

//*************************************

//输出内容

//

$outputFileName = time().".xls";

////导出到文件,保存到服务器上,需要自行下载

//try{

// $objWriter->save($outputFileName);

// echo "导出到".$outputFileName."成功!";

//}

//catch(Exception $e){

// echo "<p><b>导出失败!".$outputFileName."可能正在被使用!</b></p>";

// //echo $e;

//}

//or

////导出到浏览器,自动下载到本地

try{

header("Content-Type: application/force-download");

header("Content-Type: application/octet-stream");

header("Content-Type: application/download");

header('Content-Disposition:inline;filename="'.$outputFileName.'"');

header("Content-Transfer-Encoding: binary");

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Pragma: no-cache");

$objWriter->save('php://output');

}

catch(Exception $e){

echo "<p><b>导出失败!</b></p>";

}

?>

如果有不懂的请自己看DocumentationAPI目录中的文档。

PHP对XML的读写实例

新建两个文件,文件名分别为:photo_list.php、photo_list.xml,放在同一目录下。

photo_list.xml文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?xml version="1.0" encoding="utf-8"?>
<photos>
<photo>
<filename>flashmo_175_01.jpg</filename>
<title>精美相框</title>
<description>
</description>
</photo>
<photo>
<filename>flashmo_175_02.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_03.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_04.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_05.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_06.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_07.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_08.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_09.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_10.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_11.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_12.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_13.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_14.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_15.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_16.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>flashmo_175_17.jpg</filename>
<title>精美相框</title>
<description>
精美相框
</description>
</photo>
<photo>
<filename>1300513578.jpg</filename>
<title>精美相框</title>
<description>精美相框</description>
</photo>
<photo>
<filename>1300513595.jpg</filename>
<title>精美相框</title>
<description>精美相框</description>
</photo>
<photo>
<filename>1300514082.jpg</filename>
<title>精美相框</title>
<description>精美相框</description>
</photo>
</photos>

photo_list.php文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<title>XML Library</title>
</head>
<?php
$xml = new DOMDocument('1.0');
$xml->load( 'photo_list.xml' );
switch($_GET['action']){
//添加内容
case 'add':
$filename2 = time().'.jpg';
$root=$xml->getElementsByTagName('photos')->item(0);
//创建结点
$Nphoto=$xml->createElement('photo');
$Nfilename=$xml->createElement('filename');
$Ntitle=$xml->createElement('title');
$Ndescription=$xml->createElement('description');
//各结点的值
$Tfilename=$xml->createTextNode($filename2);
$Ttitle=$xml->createTextNode('精美相框');
$Tdescription=$xml->createTextNode('精美相框');
//值插入结点
$Nfilename->appendChild($Tfilename);
$Ntitle->appendChild($Ttitle);
$Ndescription->appendChild($Tdescription);
//保存结点
$Nphoto->appendChild($Nfilename);
$Nphoto->appendChild($Ntitle);
$Nphoto->appendChild($Ndescription);
$root->appendChild($Nphoto);
$xml->save('photo_list.xml');
echo "添加成功!";
exit();
//删除内容
case 'del':
$filename = $_GET['file'];
$root=$xml->getElementsByTagName('photos')->item(0);
$N_photo=$root->getElementsByTagName('photo');
foreach($N_photo as $Nphoto){
$N_filename=$Nphoto->getElementsByTagName('filename');
if($N_filename->item(0)->firstChild->nodeValue==$filename){
$root->removeChild($Nphoto);
$xml->save('photo_list.xml');
echo "删除成功!";
}
}
exit();
//列出内容
default:
}

$description = array();
$filename = array();
$title = array();
$count = 0;
$XMLGroups = $xml->getElementsByTagName('photos')->item(0);
foreach($XMLGroups->getElementsByTagName('photo') as $groupNode) {
$description[$count] = $groupNode->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$filename[$count] = $groupNode->getElementsByTagName('filename')->item(0)->firstChild->nodeValue;
$title[$count] = $groupNode->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$count++;
}

?>

<body>
<br />

<?
$Length=count($filename);
$i=0;
while($i<$Length){
echo '<div style="border:1px; border-style:dashed; border-color:#000000; width:820px;">';
echo "文件名:$filename[$i]<br>标题:$title[$i]<br>描述:$description[$i]<br>";
echo '</div><br>';
$i++;
}
?>

<br />
</body>
</html>

PHP GET方法ajax实例

首先新建两个文件,文件名分别为:mail.html、mail.php,放在同一目录下。

mail.html文件内容如下:

 1 <html>

 2 <head>

 3 <meta http-equiv="content-type" content="text/html;charset=utf-8">

 4 </head>

 5 <body>

 6 <form action="" method="post" name="form1" id="form1">

 7 <table border="1" width="100%">

 8 <tr><td height="30">

 9 请选择:

10 <select name="Card_Choice" id="Card_Choice" onChange="valideMail(this)">

11

12 <option id="s1" value="无"></option>

13

14 <option id="s2" value="123">123</option>

15

16 <option id="s3" value="abc">abc</option>

17

18 <option id="s4" value="34dfd@">34dfd@</option>

19

20 </select><span id="show"></span>

21

22 </td></tr>

23

24 </table>

25

26 </form>

27

28 </body>

29

30 </html>

31

32 <script language="javascript">

33

34 var xmlHttp;

35

36 function valideMail(obj) {

37

38 //var email = document.getElementById("eMail");

39

40 var url = "mail.php?email=" + obj.value;

41

42 if (window.ActiveXObject) {

43

44 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

45

46 } else if (window.XMLHttpRequest) {

47

48 xmlHttp = new XMLHttpRequest();

49

50 }

51

52 xmlHttp.onreadystatechange = callBack;

53

54 xmlHttp.open(‘GET’, url, true);

55

56 xmlHttp.send(null);

57

58 }

59

60 function callBack() {

61

62 if (xmlHttp.readyState == 4) {

63

64 if (xmlHttp.status == 200) {

65

66 document.getElementById("show").innerHTML = "show:" + xmlHttp.responseText;

67

68 }

69

70 }

71

72 }

73

74 </script>

mail.php文件内容如下:

 1 <?php

 2

 3 $email = $_GET["email"];

 4

 5 if ($email == "") {

 6

 7 $email = "rrrrrrrrrrrrrrrrrr !";

 8

 9 }

10

11 echo ($email);

12

13 exit(0);

14

15 ?>

PHP POST方法ajax实例

首先新建两个文件,文件名分别为:ajax_post.html、ajax_output_post.php,放在同一目录下。

ajax_post.html内容如下:

 1 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head>

 2

 3 <script language="javascript">

 4

 5 function saveUserInfo() {

 6

 7 //获取接受返回信息层

 8

 9 var msg = document.getElementById("msg");

10

11 //获取表单对象和用户信息值

12

13 var f = document.user_info; var userName = f.user_name.value; var userAge = f.user_age.value; var userSex = f.user_sex.value;

14

15 //接收表单的URL地址

16

17 var url = "ajax_output_post.php";

18

19 //需要POST的值,把每个变量都通过&来联接

20

21 var postStr = "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex;

22

23 //实例化Ajax //var ajax = InitAjax();

24

25 // var ajax = false;

26

27 //开始初始化XMLHttpRequest对象

28

29 if(window.XMLHttpRequest) {

30

31 //Mozilla 浏览器

32

33 ajax = new XMLHttpRequest();

34

35 if (ajax.overrideMimeType) {

36

37 //设置MiME类别

38

39 ajax.overrideMimeType("text/xml"); }

40

41 } else if (window.ActiveXObject) {

42

43 // IE浏览器

44

45 try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!ajax) {

46

47 // 异常,创建对象实例失败

48

49 window.alert("不能创建XMLHttpRequest对象实例."); return false; }

50

51 //通过Post方式打开连接

52

53 ajax.open("POST", url, true);

54

55 //定义传输的文件HTTP头信息

56

57 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

58

59 //发送POST数据

60

61 ajax.send(postStr);

62

63 //获取执行状态

64

65 ajax.onreadystatechange = function() {

66

67 //如果执行状态成功,那么就把返回信息写到指定的层里

68

69 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } }

70

71 }

72

73 </script>

74

75 <body > ?<form name="user_info" method="post" action=""> 姓名:<input type="text" name="user_name" /><br /> 年龄:<input type="text" name="user_age" /><br /> 性别:<input type="text" name="user_sex" /><br />

76

77 <input type="button" value="提交表单" onClick="saveUserInfo()"> </form><div id="msg"> </div> </body>

ajax_output_post.php内容如下:

1 <?

2  

3 echo ’姓名:.$_POST[user_name].<br>‘;

4  

5 echo ’年龄:.$_POST[user_age].<br>‘;

6  

7 echo ’性别:.$_POST[user_sex].<br>‘;

8  

9 ?>

一些开发手册下载

最近收集整理了一些可能会用得上的开发手册,顺便分享一下。

shell编程手册.pdf http://u.115.com/file/f5b4066e87

php_manual_zh.chm(php中文手册) http://u.115.com/file/f5e120322a

W3C_Javascript参考手册_2010-07-19.chm http://u.115.com/file/f553fd50e3

Linux_c库函数参考手册.pdf http://u.115.com/file/f54fee1a8

C语言标准库函数查询手册.pdf http://u.115.com/file/f52f739afa

gtk函数手册.rar http://u.115.com/file/f576f4ba8d

gtk_2.0中文指南.rar http://u.115.com/file/f534036897

GTK+_API.gz http://u.115.com/file/f518d8b95b

python-3.1.2-docs-html.tar.bz2(python-3.1.2官方手册) http://u.115.com/file/f59bee52a2

python-2.6.6-docs-html.tar.bz2(python-2.6.6官方手册) http://u.115.com/file/f54da60b40

pygtk_2.24.0-docs-html.tar(pygtk_2.24.官方手册) http://u.115.com/file/f5f02cfa2d

pygtk_2.14.0-docs-html.tar(pygtk_2.14.官方手册) http://u.115.com/file/f58acb5b52

推荐一款不错的编辑器——Komodo Edit

Komodo Edit是一款免费开源的代码编辑器,支持 Perl, Python, Tcl, PHP, Ruby, Javascript等多种语言。支持语法高亮、自动填充、代码折叠的功能,方便编写代码。更不错的是它是跨平台的,支持Windows, Mac和Linux。

偶正苦于Linux下没有好的Python的编辑器,这个工具正好为偶提供了方便。

虽然它的功能不错,但毕竟也只是一个编辑器,没有程序调试的功能,如果想要调试程序的话可以选择Komodo IDE。不过Komodo IDE是收费的。

下载地址:http://www.activestate.com/komodo-edit

PyInstaller——python打包工具

前一篇文章介绍了使用py2exe将python转换成exe格式。由于py2exe只能在windows下使用,今天又介绍另一个python的打包工具——PyInstaller。PyInstaller可以在Windows, Linux, Mac OS X下运行。

使用方法

1、下载安装
下载地址:http://www.pyinstaller.org/
对于windows系统可以直接用安装包安装。对于Linux系统 ,下载后解压并进入解压目录执行如下命令:
cd source/linux
python ./Make.py
make

安装之后请运行PyInstaller目录下的Configure.py脚本进行配置。

2、使用
执行如下命令进行打包:
python PyInstaller目录/Makespec.py [–onefile] 你的程序目录/yourscript.py
python PyInstaller目录/Build.py 你的程序目录/yourscript.spec

如偶的PyInstaller目录为$HOME/PyInstaller,偶的程序目录为$HOME/python,则执行命令:
python $HOME/PyInstaller/Makespec.py [–onefile] $HOME/python/yourscript.py
python $HOME/PyInstaller/Build.py $HOME/python/yourscript.spec

如果要打包为一个文件则加上–onefile参数,否则别加。如果没有错误则在$HOME/python/dist目录下生成yourscript二进制文件。

py2exe——python转exe

py2exe是一个可以把python脚本转成windows下的exe可执行程序的模块。这样就可以在没有安装python的机器运行python程序了。这个有点类似于其他语言的静态编译。

py2exe使用方法:

1、首先下载安装,http://www.py2exe.org/

2、在你的python程序的同一目录下创建一个setup.py脚本。

1
2
3
4
from distutils.core import setup
import py2exe

setup(console=['hello.py']) #hello.py是你想要转换的文件

3、运行setup.py
python setup.py py2exe

4、 如果没有错误的话就会在当前目录的dist子目录下生成一跟你的python文件同名的exe文件。