web-dev-qa-db-ja.com

pyinstallerフック、または非表示のインポートを適切に作成する方法は?

私は2つのパッケージ(たとえば、datareaddatainspector)を持っていますが、これらはPyInstallerによって検出されませんでした。このため、実行中のアプリケーションがそれらのパッケージからモジュールをインポートする必要があるポイントに到達すると、アプリケーションは終了します。

最も簡単な解決策は、datareaddatainspectorをパッケージ化されたアプリにコピーすることです。しかし、これはアプリケーションのバイナリバージョンをパッケージ化する意図を壊します。

非表示のインポートとフックについて読みましたが、どちらも問題を解決できると思いますが、どちらを使用するかわかりません。

助言がありますか? PS:これらのパッケージは両方ともネストされたディレクトリを含む場合があります。

16
swdev

フックは、pyinstallerがインポート文を見つけたときに追加のアクションを指定するファイルです。したがって、pyinstallerがhiddenimports = ['_proxy', 'utils', 'defs']を見つけた場合にimport dataを含む「hook-data.py」ファイルを追加すると、hook-data.pyファイル内の追加のコマンドがチェックされます。フックへのパスを--additional-hooks-dirで指定する必要があります(コンパイル専用ファイルとソースを混在させるよりもクリーンなワークスペースを維持することをお勧めします)

http://pythonhosted.org/PyInstaller/hooks.html

より簡単な解決策は、pyinstallerスクリプトと共に--hidden-import=modulenameを使用することです。静かにimportステートメントとしてモジュールを追加します。

どのファイルにどのモジュールが必要かを指定したい場合は、フックの方が適しています。 「--hidden-import」は、ワンショットとして、またはデバッグのために単純です。

27