项目编译打包脚本源码参考:
import os import shutil import compileall import glob import zipfile
''' 1. 将.py 编译成.pyc 2. 把pyc 文件从pycache 目录中移动出来,放到py 文件对应的位置 3. 修改pyc 文件名,生成的pyc 文件的文件名一般为 **.cpython-38.pyc pyc 文件可以和py 文件一样用import 导入,但是在此之前需要将pyc 文件重命成对应的py 文件的名 4. 打包成 xxx.zip 文件(对启动文件有要求,必须是__main__.py 才可以) 5. 直接运行.zip 文件,例如:python xxx.zip '''def clear__pycache__(filepath): ''' 清理中间文件夹__pycache__ ''' files = os.listdir(filepath) for fd in files: cur_path = os.path.join(filepath, fd) if os.path.isdir(cur_path): if fd == '__pycache__' or fd == 'syn_logs': (cur_path) else: clear__pycache__(cur_path)def clear_allpy(filepath): ''' 清理所有.py 文件 ''' files = os.listdir(filepath) for fd in files: cur_path = os.path.join(filepath, fd) if os.path.isdir(cur_path): for infile in glob.glob(os.path.join(cur_path, '*.py')): os.remove(infile) # print('dddd====', infile) clear_allpy(cur_path) else: if os.path.splitext(cur_path)[-1][1:] == 'py': os.remove(cur_path)def movePycToPycacheOuter(filepath): ''' 将 .pyc 文件移动到 __pycache__ 文件夹之外 '''1
2
3
4
5python怎么读取py文件
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
files = os.listdir(filepath) for fd in files: cur_path = os.path.join(filepath, fd) if os.path.isdir(cur_path): if fd == '__pycache__': # print('__pycache__=====:', cur_path) fileNameList = os.listdir(cur_path) for filename in fileNameList: # 改名 oldname = f'{cur_path}/{filename}' filename = filename.split('.')[0] + '.pyc' newname = f'{cur_path}/{filename}' # print('----oldname--:', oldname, '----newname--:', newname) os.rename(oldname, newname) # 移动文件 new_path, f = os.path.split(cur_path) ve(newname, f'{new_path}/{filename}') else: movePycToPycacheOuter(cur_path)# to_zip 表示源文
件或者源目录,save_zip_name 表示目的zip 文件(可带目录)def zip_compress(to_zip, save_zip_name): # 1. 先判断输出save_zip_name 的上级是否存在(判断绝对目录),否则创建目录 save_zip_dir = os.path.split( os.path.abspath(save_zip_name))[0] #save_zip_name 的上级目录 if not ists(save_zip_dir): os.makedirs(save_zip_dir) print('创建新目录%s' % save_zip_dir) f = zipfile.ZipFile(os.path.abspath(save_zip_name), 'w', zipfile.ZIP_DEFLATED) # 2.判断要被压缩的to_zip 是否目录还是文件,是目录就遍历操作,是文件直接压缩 if not os.path.isdir(os.path.abspath(to_zip)): #如果不是目录,那就是文件 if ists(os.path.abspath(to_zip)): #判断文件是否存在 f.write(to_zip) f.close() print('%s 压缩为%s' % (to_zip, save_zip_name)) else: print('%s 文件不存在' % os.path.abspath(to_zip)) else: if ists(os.path.abspath(to_zip)): #判断目录是否存在,遍历目录 zipList = [] for dir, subdirs, files in os.walk(to_zip): #遍历目录,加入列表 for fileItem in files: zipList.append(os.path.join(dir, fileItem)) # print('a',zipList[-1]) for dirItem in subdirs: zipList.append(os.path.join(dir, dirItem)) # print('b',zipList[-1]) #读取列表压缩目录和文件 for i in zipList: f.write(i, i.replace(to_zip, '')) #replace 是减少压缩文件的一层目录,即压缩文件不包括to_zip 这个目录 # print('%s 压缩到%s'%(i,save_zip_name)) f.close() print('%s 压缩为%s' % (to_zip, save_zip_name))
5354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
107
else: print('%s 文件夹不存在' % os.path.abspath(to_zip))def encryptBaling(): # 1. 将源码拷贝到指定目录下 balingDir = './diningpos' if ists(balingDir) is True: (balingDir) os.makedirs(balingDir) pytree('./app', balingDir + '/app') pyfile('./server.py', balingDir + '/__main__.py') print(f'已将./app 与./server.py 拷贝到{balingDir}') # 2. 清理__pycache__已编译的文件 clear__pycache__(balingDir) print(f'清理{balingDir}下__pycache__文件夹完毕') # 3. 将.py 源文件编译成.pyc 文件 compileallpile_dir(balingDir) print(f'编译{balingDir}下所有.py 文件夹完毕') # 4. 将.pyc 文件移动到__pycache__文件夹之外 movePycToPycacheOuter(balingDir) print(f'移动{balingDir}文件夹下所有.pyc 文件完毕') # 清理掉__pycache__ clear__pycache__(balingDir) # 5. 清理所有.py 文件 clear_allpy(balingDir) print(f'清理{balingDir}文件夹下所有.py 文件完毕') # 6. 将文件夹压缩成zip 文件 zip_compress(balingDir, 'diningpos.zip')if __name__ == "__main__": encryptBaling()108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论