使用PyInstaller打包Python程序

2015年1月14日 没有评论 13 人阅读  

PyInstaller介绍:
PyInstaller是一个能将Python程序转换成单个可执行文件的程序,操作系统支持Windows, Linux, Mac OS X, Solaris和AIX。并且很多包都支持开箱即用,不依赖环境。

环境为windows7操作系统,python2.7.8 virtual environment
官网:https://github.com/pyinstaller/pyinstaller

详细步骤:
1,win7下面先安装这个依赖:pywin32,下载下来后切换到venv2.7,然后使用easy_install xxx.exe安装

2,pip安装PyInstaller:

pip install pyinstaller

3,打包过程中可能会出现msvcp90.dll找不到的问题,去http://cn.dll-files.com/msvcp90.dll.html下载第三个zip文件,解压后放到C:\Windows\System32,如果是64位的还要放到C:\Windows\SysWOW64目录下。

4,再次运行报MSVCR90.dll找不到,同理去http://cn.dll-files.com/MSVCR90.dll.html下载MSVCR90.dll,放到C:\Windows\System32和C:\Windows\SysWOW64中。

5,将你的整个程序先复制到某个临时文件夹下面,比如D:\tmp\core-wxpython,此目录下有个main.py是执行入口

6,执行build命令,并添加必要的搜索路径,外加执行文件的图标:

cd D:\tmp\core-wxpython
pyinstaller -F -w -i d:\tmp\main.ico main.py

如果还想添加自定义的依赖库,就要加上-p参数:

pyinstaller -F -w -p D:\tmp\core-python\libs -i d:\tmp\main.ico main.py

参数说明:
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标 阅读全文…

分类: Python 标签: ,

python函数装饰器详解

2014年12月26日 1 条评论 28 人阅读  

装饰器简介

python有着强大的表达式语法和函数特性,其中一个我的最爱便是装饰器。在设计模式中,装饰器能够在不使用子类的情况下动态的修改函数、方法或类的功能。
当你需要扩展某个函数的功能却不想直接修改这个函数的时候,装饰器就可以派上用场了。实现装饰器模式有很多种方法,但是python通过强大的语法支持来让这个变得相当容易。

在这篇文章中我将深入讲解Python的函数装饰器,并通过一系列的源码示例来彻底讲清楚这个东西。所有例子都在Python2.7下运行通过,不过只需要稍作改变就可以运行在Python3上了,甚至我猜测什么都不用改变都可以的,读者可以自己去试试。

本质上来讲,装饰器是以包装器形式工作的,其实就是在执行目标函数之前或之后加入自己的逻辑,而不需要改变目标函数本身就可以增强它的功能,也就是说装饰了它。

你需要知道的函数

在深入讨论之前,有一些基本的概念需要讲明清楚。在Python中,函数是一等公民,它们就是对象,因此我们可以使用它来做很多事。

1.把函数赋值给某个变量:

def greet(name):
    return "hello "+name

greet_someone = greet
print greet_someone("John")

# Outputs: hello John

2.在某个函数内部定义另外一个函数:

def greet(name):
    def get_message():
        return "Hello "

    result = get_message()+name
    return result

print greet("John")

# Outputs: Hello John

3.函数可以被当做参数传递给另外一个函数: 阅读全文…

分类: Python 标签: ,

Django1.7开发博客(10)- 全文搜索

2014年12月22日 没有评论 117 人阅读  

Django本身不提供全文检索的功能,但django-haystack为其提供了全文检索的框架。django-haystack能为Django提供whoosh,solr,Xapian和Elasticsearc四种全文检索引擎作为后端。其中whoosh为纯python的实现,不是非常大型的应用,是没有问题的。本文将介绍Django1.7中通过django-haystack与whoosh集成以及whoosh的中文支持。

先安装依赖:

pip install django-haystack
pip install whoosh
pip install jieba

我们以文章为搜索目标,现在我的app名字为blog,模型文件是mysite/blog/models.py : 阅读全文…

分类: Django 标签: ,

通过七牛云存储缓存加速Gravatar头像

2014年11月14日 没有评论 35 人阅读  

最近访问博客有点慢,查了下原因貌似是Gravatar官网被qiang了,是在很无语啊,除了呵呵以外我又能怎样呢?不过我还是要解决这个问题。
如果你使用七牛云存储的话,可以通过七牛云存储缓存加速Gravatar头像以解决因某qiang导致的官方头像加载不了,速度慢的问题。对于WordPress博客速度上的提升绝对是非常可观的。

一、申请七牛账号。
下面的操作需要你有七牛账号,如果没有可以先去注册一个,很简单的。不然不想注册也可以直接进行第三步“修改WordPress的get_avatar函数”,本人可以免费为您提供改该域下的七牛云存储缓存加速Gravatar头像服务。话说回来,还是建议你注册一个账号,用自己的才是最放心的。

二、源站加速。
你申请七牛账号后应该会有个空间的,比如我的空间名叫yidaoblog。进入空间后,选择“空间设置”->“基本设置”->“镜像存储”,输入多说所在的gravatar.duoshuo.com
镜像存储新增 阅读全文…

分类: 朝花夕拾 标签:

Python正则表达式详解

2014年11月12日 没有评论 38 人阅读  

先介绍下最常见的元字符metacharacter:

符号 含义 示例
literal 匹配字符串的值 foo
re1|re2 匹配正则式re1或re2 foo|bar
. 匹配一个任何字符(换行符除外) b.b
^ 匹配字符串开始 ^Dear
$ 匹配字符串结束 /bin/*sh$
* 匹配前面出现的零次或多次 [A-Za-z0-9]*
+ 匹配前面出现的一次或多次 [a-z]+\.com
? 匹配前面出现的零次或一次 goo?
{N} 匹配前面出现的正则式N次 [0-9]{3}
{M,N} 匹配前面出现的M次到N次 [0-9]{5,9}
[…] 匹配字符组里出现任意一个字符 [aeiou]
[x-y] 匹配从字符x到y中的任意一个字符 [A-Za-z]
[^…] 匹配不在字符集中的任意一个字符 [^A-Za-z]
(*|+|?|{})? 用于上面出现的任何“非贪婪”版本重复匹配次数 .*?[a-z]
(…) 匹配封闭括号中的正则式并保存为子组 ([0-9]{3})?

接下来再介绍几个特殊字符: 阅读全文…

分类: Python 标签: ,

搭建个人WordPress博客笔记

2014年11月11日 没有评论 124 人阅读  

最近花了几个晚上时间搭建了一个WordPress博客,这是我搭建的第一个独立博客,相比以前用过的一些博客托管网站,现在终于有了点家的感觉。
博客搭建并不复杂,只是过程有点繁琐,适合喜欢折腾的人,主要有下面几个步骤:
1. 购买域名(Domain Name)
2. 注册一个主机空间(Web Host)
3. 域名解析(DNSPod)
4. 安装WordPress
5. 安装WordPress主题
6. 设置固定链接
7. 安装插件
8. 图片存储
9. 添加网站图标
完成这几个步骤之后,博客基本上就可以正常使用了,当然后面还要做一些优化,这方面这里不予讨论,下面针对每一项操作做具体的介绍。

购买域名
域名当然要去最有名的去他爹网站(goDaddy)购买了,作为全球最大的域名注册商,且支持支付宝付款,是我们购买域名的不二选择。
godaddy
域名后缀推荐买一级域名“.com”,虽然“.com”域名比其他的贵些,但是goDaddy会定期做优惠活动,Google上搜索“goDaddy优惠券”会出现很多相关链接,我的域名就是在做活动的时候买的,只花了1美元。如果选中了喜欢的域名,而暂时没有活动时,不妨加入购物车后等几天,相信你会收到打折邮件的。另外购买特价域名时只能用信用卡,所以一张双币信用卡也是必不可少的。 阅读全文…

分类: 朝花夕拾 标签:

Django1.7开发博客(9)- 用户认证

2014年11月11日 3 条评论 400 人阅读  

安全问题
你应该注意到了一点,当你去新建、修改和删除文章的时候并不需要登录,这样的话任何浏览网站的用户都能随时修改和删除我的文章。这个可不是我想要的!

编辑和删除的认证
我们需要保护post_new, post_edit和post_publish这三个视图,只有登录用户才有权去执行。django为我们提供了很好的帮助类,其实就是利用了python中的decorators技术。django中认证的装饰器位于模块django.contrib.auth.decorators中,名称叫login_required。
编辑blog/views.py文件,在import部分添加如下的导入语句:

from django.contrib.auth.decorators import login_required

然后在post_new, post_edit和post_publish这三个函数上添加@login_required,类似下面

@login_required
def post_new(request):
    [...]

好的,现在你再去访问下http://localhost:8000/post/new/,看看有啥变化。 阅读全文…

分类: Django 标签:

Django1.7开发博客(8)- 继续完善

2014年11月11日 1 条评论 332 人阅读  

到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了。我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现。

草稿箱
之前我们新建文章的时候只是是保存到数据库,也就是仅仅保存了草稿,还没有对外发布,在博客首页上面是看不到的,因为published_date字段为空。这里我们需要添加一个草稿箱的链接。还是四部曲。
第一步添加一个链接:
打开mysite/templates/mysite/base.html文件,在

<h1><a href="/">Django Girls Blog</a></h1>

的上面一行添加如下链接:

<a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a>

第二步就是配置urls,在blog/urls.py中添加:

url(r'^drafts/$', views.post_draft_list, name='post_draft_list'),

第三步在blog/views.py中添加一个view:

def post_draft_list(request):
    posts = Post.objects.filter(published_date__isnull=True).order_by('-created_date')
    return render(request, 'blog/post_draft_list.html', {'posts': posts})

第四步添加一个template,新建blog/templates/blog/post_draft_list.html,内容如下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(7)- 实现功能

2014年11月11日 8 条评论 513 人阅读  

到目前为止我们已经完成了一个django应用的所有基础部分。包括url配置、视图、模型和模板。接下来开始继续完善我们的博客系统了。
首先我们需要一个显示每篇文章的详细页面,对不?

文章详情链接
对于首页每一篇文章,我们希望点击标题后可以进入该文章的阅读页面。修改post_list.html中的标题href如下:

<h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1>

我来详细解释下这个{% url ‘blog.views.post_detail’ pk=post.pk %},{% %}表示使用django模板标签而不是普通的HTML文字,这里我们使用了url标签来生成真正的url链接。blog.views.post_detail是视图的全路径。

url配置
我们希望文章详细页面的链接类似这样:http://127.0.0.1:8000/post/1/
修改blog/urls.py为下面的这样:

from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^$', views.post_list),
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail),
)

这个看起来有点复杂,我们来解释下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(6)- 模板继承

2014年11月11日 2 条评论 396 人阅读  

什么是模板继承?
就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容。通过这种方式你就需要在每个页面复制粘贴同样的代码了。如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一个模板就行了,这样最大化复用,减少了冗余,也减少了出错的几率,而且你敲的代码也少了。

创建一个base模板
一个base模板就是你全站所有页面都会继承的最基本的网站框架模板。我们在blog/templates/blog/中创建一个base.html模板:

blog
└───templates
    └───blog
            base.html
            post_list.html

打开base.html,然后将post_list.html的所有内容都复制过来,现在它的内容如下: 阅读全文…

分类: Django 标签: