-1

我在尝试使用 pyinstaller 将 python 代码转换为 exe 时遇到了麻烦。

我所经历的是,该函数__import__在执行 exe 文件期间仅导入其中一个包含的模块,但保留其他模块。

我发现,在某种程度上,__import__函数是导致这个问题的原因。我知道它只是使用名称导入模块的功能,但我仍然不了解这里的全部情况。

这怎么sys.path配合?它甚至相关吗?

有关系__name__吗?如果有怎么办?

在将转换为 exe 的 python 程序中使用此函数有什么影响?

我需要尽可能多的信息,因为我遇到了一个从可执行文件运行时无法动态加载模块的项目。(模块是潜意识的)。我已经在 github 中打开了关于这些的问题。(链接:- https://github.com/pyinstaller/pyinstaller/issues/2746https://github.com/pyinstaller/pyinstaller/issues/2747

4

1 回答 1

-1

PyInstaller 使用静态分析来确定您的程序需要哪些模块(以及提供这些模块需要哪些文件)。但是,有许多 PyInstaller无法检测到的模块可以被导入(动态甚至静态)的方式。您必须手动向 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')

要包含 babelfish,请编辑您的规范文件以包含以下内容:

from PyInstaller.hooks.hookutils import collect_submodules

a = Analysis(...
     hiddenimports=collect_submodules('babelfish'),
     ...
     )
于 2017-08-16T13:19:43.177 回答