2014-01-17 3 views
0

Я разрабатываю кросс-платформенное приложение, которое отправляет дополнительные двоичные файлы из исходного каталога для linux и windows. Сейчас я использую следующий скрипт в моем файле * .spec, чтобы включить все двоичные файлы из исходного каталога.Pyinstaller - Исключить файлы из окончательного исполняемого файла

##### 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') 

Все работает хорошо. Теперь проблема в том, что когда я создаю binay из окон, все дополнительные бинарные файлы linux также отправляются в окончательный исполняемый файл. Это делает окончательный автономный исполняемый файл большим по размеру.

Есть ли способ сообщить pyinstaller для выполнения определенных файлов/бинарников из исходного каталога. Кроме того, можно исключить определенные * .so/* .dll, которые действительно не требуются в финальном исполняемом файле?

Я использую следующие для развития: -

Python 2.7

Pyinstaller 2,1

Debian 7 для Linux

ОС Windows 7 для Win

Любая помощь appriciated.

ответ

1

уверен, просто добавьте список файлов для исключения

def extra_datas(mydir,exclude=[]): 
    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) 
    return [(f, f, 'DATA') for f om files if f not in exclude] 

a.datas += extra_datas(some_dir,["something.txt","something.exe",...]) 

как для им DLL, уверен, что есть явное Exlude исключить библиотеки DLL, которые обычно автомагически быть включены

[править] увидеть этот ответ wrt исключая dll https://stackoverflow.com/a/17595149/541038

+0

Благодарим вас за сценарий. Это сработало. Но с небольшими изменениями. Пример: - 'a.datas + = extra_datas (some_dir, [" путь/to/something.txt "," путь/to/something.exe ", ...])' –

Смежные вопросы