我有一个主脚本,使用importlib从另一个脚本(sub_script.py)导入模块。我还将参数传递给另一个脚本:
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,它就会顺利运行并运行:
import sub_script
有什么想法吗?谢谢!
答案 0 :(得分: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