2016-11-18 3 views
1

Я пытаюсь упаковать приложение PyQt с помощью pyinstaller. Мой simplyfied дерево каталогов выглядит следующим образом:pyinstaller: добавление отсутствующих данных из импортированного модуля

maindir/ 
├── build/ 
├── dev_tool.py 
├── dev_tool.spec 
├── dist 
│   └── dev_tool/ 
└── ... 

Когда я запустить исполняемый файл dev_tool из dist/ папки

$ ./dist/dev_tool/dev_tool

Я получаю ошибку, что она была не в состоянии найти .../dev_tool/langdetect/utils/messages.properties. Однако, когда я вручную добавляю папку langdetect (которую я просто скопировал из моих пакетов-сайтов python после того, как pip install langdetect -ed), он работает. Теперь я читал о том, как можно добавлять файлы, определяя его в файле .spechere, однако, если я попытаюсь скопировать папку langdetect/ из моих пакетов-сайтов Python в папку dist/dev_tool/, это все равно не работает.

Я добавил следующие строки в моем dev_tool.spec файл

a = Analysis (... 
datas=[('path_to.../site-packages/langdetect', 'dist/dev_tool/langdetect')] 
...) 

В случае, если это не копия все из папки langdetect сайт-пакеты для dist/dev_tool/langdetect/?

Любая помощь здесь была бы очень признательна.

ответ

0

Вы можете использовать класс Tree от PyInstaller.

# dev_tool.spec 
langdetect_toc = Tree('C:\\[site-packages]\\langdetect', 
         prefix='langdetect', 
         excludes=['*.py','*.pyc', '*test*']) 
a.datas += langdetect_toc 

Затем работает pyinstaller с dev_tool.spec в качестве аргумента будет размещать все необходимые файлы данных из langdetect в dist\dev_tool\langdetect так dev_tool можете найти их во время выполнения.

0

Это работает для меня:

a = Analysis(
    # your other stuff here... 
    datas=[ 
     ('langdetect/utils', 'csg_fileutil_libs/langdetect/utils'), # for messages.properties file 
     ('langdetect/profiles', 'csg_fileutil_libs/langdetect/profiles'), 
      ] 
    # the rest of your analysis spec... 
    ) 
Смежные вопросы