Собрать все модули Python, используемые в одной папке? - PullRequest
7 голосов
/ 25 мая 2009

Не думаю, что об этом спрашивали раньше - у меня есть папка, в которой много разных файлов .py. Сценарий, который я создал, использует только некоторые из них, но некоторые вызывают другие, и я не знаю всех используемых. Есть ли программа, которая получит все необходимое для запуска этого скрипта в одной папке?

Ура!

Ответы [ 3 ]

6 голосов
/ 25 мая 2009
# 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:])
6 голосов
/ 25 мая 2009

Используйте модуль modulefinder в стандартной библиотеке, см., Например, http://docs.python.org/library/modulefinder.html

0 голосов
/ 25 мая 2009

Замораживание очень похоже на то, что вы описываете. Он делает дополнительный шаг генерации файлов C для создания автономного исполняемого файла, но вы можете использовать вывод журнала, который он производит, чтобы получить список модулей, которые использует ваш скрипт. Оттуда просто скопировать их в каталог для архивирования (или что угодно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...