2016-03-04 86 views
2

我有一个使用importlib从另一个脚本(sub_script.py)导入模块的主脚本。我也传递参数给其他脚本: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