将所有使用的Python模块收集到一个文件夹中?

Sol*_*ull 7 python

我不认为之前有过这样的问题 - 我有一个包含许多不同.py文件的文件夹.我制作的剧本只使用了一些 - 但有些人打电话给其他人,我不知道所有使用的剧本.是否有一个程序可以获得使该脚本运行到一个文件夹所需的一切?

干杯!

Dav*_*ave 6

# zipmod.py - make a zip archive consisting of Python modules and their dependencies as reported by modulefinder
# To use: cd to the directory containing your Python module tree and type
# $ python zipmod.py archive.zip mod1.py mod2.py ...
# Only modules in the current working directory and its subdirectories will be included.
# Written and tested on Mac OS X, but it should work on other platforms with minimal modifications.

import modulefinder
import os
import sys
import zipfile

def main(output, *mnames):
    mf = modulefinder.ModuleFinder()
    for mname in mnames:
        mf.run_script(mname)
    cwd = os.getcwd()
    zf = zipfile.ZipFile(output, 'w')
    for mod in mf.modules.itervalues():
        if not mod.__file__:
            continue
        modfile = os.path.abspath(mod.__file__)
        if os.path.commonprefix([cwd, modfile]) == cwd:
            zf.write(modfile, os.path.relpath(modfile))
    zf.close()

if __name__ == '__main__':
    main(*sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 6

使用modulefinder标准库中的模块,请参阅http://docs.python.org/library/modulefinder.html

  • +1你可以用它作为这样的脚本:python -m modulefinder myscript.py (2认同)

Aar*_*paa 0

冻结的效果与您所描述的非常接近。它执行生成 C 文件的额外步骤来创建独立的可执行文件,但您可以使用它生成的日志输出来获取脚本使用的模块列表。从那里将它们全部复制到要压缩的目录(或其他目录)中是一件简单的事情。