|
|
|
|
|
|
|
|
|
|
|
from distutils.core import setup
|
|
|
from Cython.Build import cythonize
|
|
|
from distutils.extension import Extension
|
|
|
import shutil
|
|
|
import os
|
|
|
from multiprocessing import Pool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def packaged_search(path, directory_file=None):
|
|
|
'''
|
|
|
遍历当前目录下文件及文件夹
|
|
|
:param path:
|
|
|
:param directory_file:
|
|
|
:return:
|
|
|
'''
|
|
|
if directory_file:
|
|
|
for i in os.listdir(path):
|
|
|
if i == directory_file:
|
|
|
path = os.path.join(path, directory_file)
|
|
|
pack_so(path)
|
|
|
elif os.path.isdir(os.path.join(path, i)):
|
|
|
packaged_search(os.path.join(path, i), directory_file)
|
|
|
else:
|
|
|
pack_so(path)
|
|
|
|
|
|
|
|
|
def pack_so(path):
|
|
|
'''
|
|
|
递归遍历所有文件夹,并创建进程池,将任务放入进程
|
|
|
:param path:
|
|
|
:return:
|
|
|
'''
|
|
|
all_file_path = []
|
|
|
for i in os.listdir(path):
|
|
|
all_file_path.append(os.path.join(path, i))
|
|
|
|
|
|
p = Pool(8)
|
|
|
for j in all_file_path:
|
|
|
p.apply_async(pack_to_so_and_del_src, args=(j, ))
|
|
|
p.close()
|
|
|
p.join()
|
|
|
for g in all_file_path:
|
|
|
|
|
|
if os.path.isdir(os.path.join(g)):
|
|
|
pack_so(g)
|
|
|
|
|
|
|
|
|
def pack_to_so_and_del_src(path):
|
|
|
'''
|
|
|
将需要打包的.py脚本进行打包
|
|
|
:param path:
|
|
|
:return:
|
|
|
'''
|
|
|
if '.py' in path and '.pyc' not in path and '__init__.py' not in path:
|
|
|
setup(
|
|
|
ext_modules=cythonize(Extension(path.rsplit('/', 1)[1].rsplit('.', 1)[0], [path])),
|
|
|
compiler_directives={'language_level': 3}
|
|
|
)
|
|
|
|
|
|
path_os = os.getcwd().rsplit('/', 1)[0] + '/pack/build/lib.linux-x86_64-3.8'
|
|
|
for j in os.listdir(path_os):
|
|
|
|
|
|
shutil.move(os.path.join(path_os, j), os.path.join(path.rsplit('/', 1)[0], j))
|
|
|
|
|
|
|
|
|
if path.rsplit('/', 1)[1] not in ['packaging_script.py', 'app.py', 'app_local.py', 'tts_config.py']:
|
|
|
os.remove(path)
|
|
|
|
|
|
|
|
|
elif len(path.rsplit('.', 1)) == 2:
|
|
|
if path.rsplit('.', 1)[1] == 'c':
|
|
|
os.remove(path)
|
|
|
|
|
|
|
|
|
def view_log():
|
|
|
'''
|
|
|
删除log日志文件
|
|
|
:return:
|
|
|
'''
|
|
|
pass
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
path = os.getcwd().rsplit('/', 1)[0]
|
|
|
packaged_search(path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
usage:
|
|
|
python3 packaging_script.py build_ext
|
|
|
打包说明:
|
|
|
|
|
|
""" |