Вопрос по installation, include, pyinstaller, python, packaging – Включение каталога с помощью Pyinstaller

17

Вся документация для Pyinstaller говорит о включении отдельных файлов. Можно ли включить каталог, или я должен написать функцию для создания массива включения путем обхода моего каталога включения?

Ваш Ответ

3   ответа
18

a = Analysis() в spec-файле для рекурсивного обхода каталога и добавления всех файлов в нем в дистрибутив.

##### include mydir in distribution #######
def extra_datas(mydir):
    def rec_glob(p, files):
        import os
        import glob
        for d in glob.glob(p):
            if os.path.isfile(d):
                files.append(d)
            rec_glob("%s/*" % d, files)
    files = []
    rec_glob("%s/*" % mydir, files)
    extra_datas = []
    for f in files:
        extra_datas.append((f, f, 'DATA'))

    return extra_datas
###########################################

# append the 'data' dir
a.datas += extra_datas('data')
Извините, но я действительно не понимаю. У меня есть каталог под названием~/Scripts, Мои данные хранятся в~/Scripts/Data, Должен ли я заменитьa.datas += extra_datas('data') отa.datas += extra_datas('Data')?
Если ваш скрипт pyInstaller также находится вScripts и ты называешь это сpython mybuildscript.py изнутриScripts тогда да, вы должны заменитьDataиначе используйте. а также.. перемещаться по дереву каталогов.
10

что никто не упомянул официальный поддерживаемый вариант, использующийTree():

https://stackoverflow.com/a/20677118/2230844

https://pythonhosted.org/PyInstaller/advanced-topics.html#the-toc-and-tree-classes

Спасибо, что поделились, используяthe Tree class решил это для меня элегантно. Теперь мне просто нужна эта строка:a.datas += Tree('./dir_to_include', prefix='dir_to_include')
да, я думаю, что это не достаточно хорошо документировано, но это с открытым исходным кодом, поэтому PR приветствуются :)
4

glob?

from glob import glob
datas = []
datas += glob('/path/to/filedir/*')
datas += glob('/path/to/textdir/*.txt')
...

a.datas = datas

Похожие вопросы