项目编译打包脚本源码参考:
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小时内删除。