2016-03-04 840 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