2016-03-04 3 views
2

У меня есть основной скрипт, который импортирует модуль из другого скрипта (sub_script.py) с помощью importlib. Я также передать аргумент другой сценарий:importlib не может найти модуль после компиляции с помощью Pyinstaller

import importlib 
parser = argparse.ArgumentParser(add_help=False) 
group = parser.add_mutually_exclusive_group(required=True) 
group.add_argument('-option1', action = "store_true") 

args = parser.parse_known_args() 

if args[0].option1: 
    function = importlib.import_module('sub_script') 
    function.main(namespace = args[1]) 

Хотя этот код прекрасно работает сам по себе (с помощью Python main_script.py), он возвращает следующее сообщение об ошибке после того, как я исполнила его Pyinstaller:

Traceback (most recent call last): 
    File "<string>", line 33, in <module> 
ImportError: No module named sub_script 
main_script returned -1 

Я попытался:

1) добавить __init__.py под моей папке

или 2) движение sub_script.py к подпапка с __init__.py , но либо работает.

Я также попытался выполнить его под Ubuntu, но получил то же сообщение.

Тем не менее, выполнил и побежал нормально, если я просто используя импорт:

import sub_script 

Любые идеи? Благодаря!

ответ

1

pyinstaller не может автоматически упаковать модуль, который импортируется динамически. Если вам действительно нужно использовать importlib для импорта модуля, вам нужно сообщить pyinstaller. Вы можете использовать --hidden_import вариант для этого:

--hidden-import MODULENAME, --hiddenimport MODULENAME 
    Name an import not visible in the code of the script(s). This option can be used multiple times. 

PyInstaller Docs Смотреть подробнее

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