clowwindy的杂草牧场

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这几天在做项目打包的时候,因为要保护知识产权,所以将py文件编译成pyc文件再打包。

于是研究了一下,编译的方法很简单,用compileall.compile_dir()函数就可以了。

首先,将项目拷贝到一个目录(过滤掉.开头的隐藏文件),然后编译,最后删除.py文件。这里有一个问题,就是原来的源码目录下可能已经有pyc了,所以在编译的时候要指定force=1强制编译一下,覆盖掉这些文件。

下面是打包脚本:

BUILD_PATH = 'build/'
PROJECT_PATH = 'src/'

import os
import os.path
import shutil
import re

# copy project files
print "copying project files"

def ignore(src,files):
results = []
for f in files:
if re.match(r'\..*',f):
results.append(f)
return results

src = PROJECT_PATH
dst = BUILD_PATH
dst_dir = os.path.dirname(dst)
if os.path.isdir(BUILD_PATH):
shutil.rmtree(BUILD_PATH)
os.makedirs(BUILD_PATH)
shutil.copytree(src, dst,ignore=ignore)

# compile python source
print "compiling python source"

import compileall

compileall.compile_dir(BUILD_PATH,quiet=0,force=1)

for fs in os.walk(BUILD_PATH):
for f in fs[2]:
if re.match(r".*\.py$",f):
f_f = fs[0]+'/'+f
print "removing "+f_f
os.remove(f_f)

print "done"



posted on 2011-10-26 16:54  clowwindy  阅读(1470)  评论(0编辑  收藏  举报