4

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

私がしようとしました:

__init__.py1)私のフォルダーの下に追加します

または2)sub_script.pyをsub_folderに移動します__init__.py が、どちらも機能します。

Ubuntuでもコンパイルしようとしましたが、同じメッセージが表示されました。

ただし、インポートのみを使用すると、準拠して正常に実行されました。

import sub_script

何か案は?ありがとう!

4

1 に答える 1

3

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 のドキュメントを参照してください。

于 2016-03-04T20:25:06.460 に答える