当前位置: 首页 > 面试题库 >

在使用PyInstaller创建的单文件exe中导入外部模块

单于海荣
2023-03-14
问题内容

我正在使用PyInstaller创建一个单文件可执行文件。是否有可能为我的脚本执行导入使得i)导入的模块是从同一个目录中的exe(即它不是打包成EXE)和ii)在导入模块可以导入其它模块中引入
打包成可执行程序?

此处的背景是导入的模块包含用户应能够修改的配置。这可能包括创建自定义派生类以及使用打包模块中的枚举。

尽管搜索很困难,但我没有找到任何建议,因为有很多相似的主题使用基本相同的关键字。


问题答案:

下列步骤允许module_name导入由PyInstaller创建的可执行文件之外的Python模块(在此命名),并允许该模块导入捆绑到可执行文件中的模块。

  • 添加excludes=['module_name']到PyInstaller规范中使用的Analysis对象。这样可以防止module_name.py被捆绑到可执行文件中。
  • 添加sys.path.append(os.path.dirname(sys.executable))module_name应用程序中导入的位置。这允许将其从可执行文件所在的目录中导入,该目录与应用程序要运行的目录不同(由于被解压缩到一个临时文件夹)。
  • 在导入外部模块 之前 ,请确保由捆绑模块之一执行由外部模块执行的所有导入。解释器 将无法 解析外部模块的进口对捆绑的模块,但 使用已在存在的人sys.modules

作为最后一个例子,请考虑以下内容。

# bundled_module1.py
import external_module



# bundled_module2.py
# module content



# external_module.py
import bundled_module2

这将失败,external_module.py因为找不到导入的模块。但是,以下方法将起作用:

# bundled_module1.py
import bundled_module2
import external_module



# bundled_module2.py
# module content



# external_module.py
import bundled_module2

如果外部模块应该能够导入的捆绑模块数量有限,那就很好了。对于较大的集合,它可能会变得笨拙。

鉴于文档指出解释器 针对捆绑到可执行文件中的模块 解析导入,这感觉像是一个可能的错误。不过,并未明确调用与可执行文件外部的模块进行互操作。



 类似资料:
  • 问题内容: 情况 我在Windows上使用Pyinstaller制作项目的.exe文件。 我想使用option来获得干净的结果和易于分发的文件/程序。 我的程序使用一个文件来存储配置选项。该文件可以由用户定制。 问题 使用选项Pyinstaller将所有声明的“数据文件”放入单个文件文件中。 我已经看到了这个请求,但它给istructions添加一个包文件 的onefile内部 ,而不是外部的,在

  • 问题内容: 现在,我正在使用Pyinstaller。我有一个脚本,可以从img文件夹中获取图像。 我生成.exe的脚本是 问题是仅生成.exe文件,但整个文件夹/ img被忽略。 问题:为了自动获取.exe文件+ / img文件夹,我需要在上一行中添加哪种附加语法? 更新12/18/2013 我的意思是:执行pyinstaller.py脚本并包含所有参数后,我必须在/ dist文件夹中看到:.ex

  • 我试着做一个*。使用pyqtgraph的python应用程序中的exe文件和使用pyinstaller的pyqt库。Pyinstaller生成单个*。exe文件没有错误,但当我尝试启动它时,我得到一个未找到pyqtgraph的错误。 如何构建单个*。使用pyinstaller的exe文件?

  • 问题内容: 我编写了一个Java代码,该文件导入了一个外部jar文件。如何在命令行上编译和运行它? 提前致谢! 问题答案: 从命令行编译: 运行: 对于Windows,请用作路径分隔符(而不是)。

  • 问题内容: 我正在使用 ,创建使用HTML,CSS,JavaScript的PyQt5应用程序。 当我们以一般方式运行时,它工作正常,即 如下导入HTML, 如下导入CSS,JavaScript文件, 现在,我尝试使用创建一个独立文件。 pyinstaller命令: 我需要在生成的文件中手动添加静态文件才能按预期工作。我想将其包含在文件本身中。如何得到这个? 问题答案: 根据您的问题,您可以假定您的