gitcompileall.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:PYmods 作者: PolyacovYury 项目源码 文件源码
def compile_file(fullname, ddir=None, force=0, rx=None, quiet=0):
    """Byte-compile one file.

    Arguments (only fullname is required):

    fullname:  the file to byte-compile
    ddir:      if given, the directory name compiled in to the
               byte-code file.
    force:     if 1, force compilation, even if timestamps are up-to-date
    quiet:     if 1, be quiet during compilation
    """
    success = 1
    name = os.path.basename(fullname)
    if ddir is not None:
        dfile = os.path.join(ddir, name).replace(os.sep, '/')
    else:
        dfile = None
    if rx is not None:
        mo = rx.search(fullname)
        if mo:
            return success
    if os.path.isfile(fullname):
        head, tail = name[:-3], name[-3:]
        if tail == '.py':
            timeStr = subprocess.check_output(
                ['git', '--no-pager', 'log', '-n', '1', '--format="%ct"', '--', fullname])[1:-2]
            if not force:
                try:
                    if not timeStr:
                        mtime = int(os.stat(fullname).st_mtime)
                    else:
                        mtime = int(timeStr)
                    expect = struct.pack('<4sl', imp.get_magic(), mtime)
                    cfile = fullname + (__debug__ and 'c' or 'o')
                    with open(cfile, 'rb') as chandle:
                        actual = chandle.read(8)
                    if expect == actual:
                        return success
                except IOError:
                    pass
            if not quiet:
                print 'Compiling', fullname, '...'
            try:
                ok = do_compile(fullname, None, dfile, True, timeStr)
            except py_compile.PyCompileError, err:
                if quiet:
                    print 'Compiling', fullname, '...'
                print err.msg
                success = 0
            except IOError, e:
                print "Sorry", e
                success = 0
            else:
                if ok == 0:
                    success = 0
    return success
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号