2017-08-16 11 views
-1

私はpyinstallerを使ってpythonコードをexeに変換しようとするのに困っています。__import __()関数は、コンパイル時にPythonプログラムにどのような影響を与えますか?

私が経験したことは、__import__は、exeファイルの実行中に含まれているモジュールのうちの1つだけをインポートしますが、他のモジュールは残しているということです。

ある意味では、__import__機能がこの問題を引き起こしていることがわかりました。私はその名前を使ってモジュールをインポートする単なる関数だと理解していますが、ここではまだ全体像を理解していません。

どのようにsys.pathがこれに繋がりますか?それは関連しているのだろうか?

これは__name__に関連していますか?もしそうなら、どのように?

exeに変換されるpythonプログラムでこの関数を使用することの意義は何ですか?

実行可能ファイルから実行すると動的にモジュールをロードできないプロジェクトがあるので、できるだけ多くの情報が必要です。 (モジュールは潜在的です)。私はgithubでこれらに関する問題を開いてきました。 (リンク: - https://github.com/pyinstaller/pyinstaller/issues/2746https://github.com/pyinstaller/pyinstaller/issues/2747

答えて

-1

PyInstallerは静的解析を使用して、プログラムに必要なモジュール(これらのモジュールを提供するために必要なファイル)を特定します。しかし、PyInstaller cannot detectと同じように、モジュールを(動的にまたは静的に)インポートできる方法はたくさんあります。これらの「隠れたインポート」をPyInstallerに手動で提供する必要があります。

subliminalsetup.pyには、その要件があります。これらの要件が検出されていない場合、PyInstallerに手動で通知する必要があります。

install_requirements = ['guessit>=2.0.1', 'babelfish>=0.5.2', 'enzyme>=0.4.1', 'beautifulsoup4>=4.4.0', 
         'requests>=2.0', 'click>=4.0', 'dogpile.cache>=0.6.0', 'stevedore>=1.0.0', 
         'chardet>=2.3.0', 'pysrt>=1.0.1', 'six>=1.9.0', 'appdirs>=1.3', 'rarfile>=2.7', 
         'pytz>=2012c'] 
if sys.version_info < (3, 2): 
install_requirements.append('futures>=3.0') 

には以下のものが含まれるためにあなたのspecファイルを編集し、バベルフィッシュを含めるには:

from PyInstaller.hooks.hookutils import collect_submodules 

a = Analysis(... 
    hiddenimports=collect_submodules('babelfish'), 
    ... 
    ) 
+0

イム申し訳ありませんが、私はすでに読んで、ドキュメントで物事をテストしています。私はこのサブリミナルがentry_points.txtを使用して、問題の原因となっているモジュールを動的にロードすることを発見しました。私はpyinstallerのウェブサイトでこの問題を解決するレシピを見つけました。しかし、残念ながら、このレシピは、ディストリビューションにentry_points.txtファイル内の複数のグループと複数の名前が含まれていると機能しません。 –

関連する問題