这几天在做项目打包的时候,因为要保护知识产权,所以将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"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?