clowwindy的杂草牧场

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  34 随笔 :: 1 文章 :: 75 评论 :: 13万 阅读

这几天在做项目打包的时候,因为要保护知识产权,所以将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   clowwindy  阅读(1500)  评论(0编辑  收藏  举报
编辑推荐:
· 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,谁才是开发者新宠?
点击右上角即可分享
微信分享提示