郭玉超

打包Python工程为PYC

2019-11-22 Views 编程 2 min read            
 

代码如下:

import os
import sys
import tarfile
import shutil
import compileall
from pathlib import Path

#drag file into this
keyword = '.cpython-37'
app = sys.argv[1]
temp = 'publish_'+Path(app).name


def rm_files(_dir, suffix):
    for prefix, dirs, files in os.walk(_dir):
        for f in files:
            if f.endswith(suffix):
                filename = os.path.join(prefix, f)
                os.remove(filename)
        for d in dirs:
            if d == '__pycache__':
                shutil.rmtree(os.path.join(prefix, d))


def move(_dir, k):
    os.chdir(_dir)
    lt = os.listdir(_dir)
    for f in lt:
        if not os.path.isdir(f):
            if k in f:
                tmp = f.replace(k, '')
                os.renames(f, tmp)
                shutil.move(os.path.join(os.path.abspath('.'), tmp), os.path.join(os.path.abspath('..'), tmp))
        else:
            move(_dir + '\\' + f, k)
            os.chdir('..')


def pack(output_filename, source_dir):
    os.chdir(source_dir)
    with tarfile.open(output_filename, "w:gz") as tar:
        for name in os.listdir('.'):
            tar.add(name)
    tar.close()
    f = Path(output_filename).resolve()
    upper = Path.cwd().parent.joinpath(output_filename)
    f.replace(upper)


if __name__ == '__main__':
    rm_files(os.getcwd(), '.pyc')
    if os.path.isdir(temp):
        shutil.rmtree(temp)
    shutil.copytree(app, temp, ignore=shutil.ignore_patterns('test', '.idea', 'log'))
    compileall.compile_dir(temp)
    move(os.getcwd(), keyword)
    rm_files(temp, '.py')
    pack(temp+'.tar.gz', temp)
    print("done!")

保存为py2pyc.py,将要打包的文件夹拖拽至此脚本,即可打包。



本文由郭玉超创作
该文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载请注明出处!
发布时间为:2019-11-22

支付宝扫码打赏 微信打赏
如果觉得这篇文章对您有帮助,可以请作者喝一杯饮料哦🥤