2017-08-16 46 views
-1

我一直在尝试使用pyinstaller将python代码转换为exe。编译时__import __()函数如何影响python程序?

我一直在经历的是,它的功能__import__只在EXE文件的执行过程中导入一个包含的模块,但离开其他模块。

我发现在某种程度上,__import__函数是导致此问题的原因。我明白,它只是一个使用他们的名称导入模块的功能,但我仍然不理解整个图片。

sys.path如何配合?它甚至有关系吗?

它与__name__?如果是这样如何?

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

我需要尽可能多的信息,因为我卡住了一个项目,无法从可执行文件运行时动态加载模块。 (该模块是潜意识的)。我已经在github上提到了这些问题。 (链接: - https://github.com/pyinstaller/pyinstaller/issues/2746,https://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') 

要包括Babelfish平台,编辑规范文件,包括以下内容:

from PyInstaller.hooks.hookutils import collect_submodules 

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

我很抱歉,但我已经阅读并在文档测试的东西。我发现这个潜意识使用entry_points.txt来动态加载一些模块,这是导致问题的原因。我发现了一个在pyinstaller网站上解决这个问题的配方。但不幸的是,如果分发包含entry_points.txt文件中的多个组和多个名称,则此配方不起作用。 –