2017-01-19 8 views
1

У меня есть питон проект, который имеет следующие файлы: деревоКак добавить относительный каталог при упаковке исполняемого python с помощью pyinstaller?

\main_dir 
    gui.py 
    data.py 
    \lib 
     \files 
      file1.txt 
      file2.txt 
    ... more_dirs and files in lib. 

В gui.py импорт data.py. data.py анализирует file1.txt как часть этого конструктора. Я хочу запустить gui.py в качестве исполняемого файла в Windows и, следовательно, использовать pyinstaller.

data.py открывает file1.txt whlie используя относительный путь: file1_dir = os.path.join(os.path.curdir, "lib", "files")

я запускаю следующую команду:

pyinstaller "..fullpath..\main_dir\gui.py" -p "..fullpath..\main_dir\" --runtime-hook "..fullpath..\main_dir\lib" 

pyistaller успешно упаковать data.py но когда запустить исполняемый файл, я получаю следующее сообщение об ошибке:

«FileNotFoundError: система не может найти указанный путь: '. \ Lib \ files \'

Я попытался сменить крюк на <fullpath>\main_dir\lib\files, но получил ту же ошибку.

Что я делаю неправильно? Как добавить к исполняемому файлу относительный dir & файлов?

ответ

1

Если я правильно понимаю, что вам не нужно использовать --runtime-hook, это для запуска другого сценария, прежде чем ваш основной скрипт начинает, например, если добавить --runtime-hook=file1.py в вашей команде, порядок выполнения во время выполнения будет: 1) запустите file1.py, 2) запустите свой основной скрипт. (Конечно, они составлены/упакованы в исполняемый файл уже)

Так что в вашем случае, вы используете gui.py импортировать data.py и data.py работает на files в lib. Вам не нужно включать lib в команду pyinstaller, просто поместите ее в ту же папку с скомпилированным exe-файлом, она будет автоматически искать файлы, как в вашем data.py; если вы хотите, чтобы вы могли включить их (файлы в lib) как datas в ваш spec-файл, таким образом эти файлы будут скопированы в целевую папку (ту же папку, где будет файл exe) при компиляции, но это действительно не нужно.

Также удалите -p, так как все ваши скрипты (gui.py и data.py) находятся в той же папке, нет необходимости говорить pyinstaller не искать imports в других местах.

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

  • Нет связанных вопросов^_^