Pyinstaller 3.4
Python 3.7 (Windows 7)
我有一个用例,其中我的主要python脚本foo.py
生成一个我要从中导入内容的traylist.py
文件。
foo.py
有时必须更新此traylist.py
文件。因此,需要foo.py
能够再次将traylist.py
导入到函数中。我使用这样的重载模块功能来完成此任务:
import traylist
importlib.reload(traylist)
menu_def = traylist.menu_def
我还尝试了以下具有相同结果的代码(在解释器中有效,但以.exe运行时失败)
import traylist
del sys.modules['traylist']
import traylist
menu_def = traylist.menu_def
在标准解释器(foo.py
)中运行python foo.py
时,所有这些工作正常。但是,当我使用pyinstaller创建--onefile
.exe时,traylist模块中的值永远不会刷新。我已经使用sys._MEIPASS检查了路径,并且可以看到MEIxxx文件夹中生成的新文件。我只是无法获取.exe才能正确重新加载该模块。
答案 0 :(得分:0)
事实证明,虽然pyinstaller允许您捆绑其他类型的文件并通过sys._MEIPASS
路径访问它们,但对于import module
语句却不成立。它具有一种单独的方式来处理这些类型的文件,并且不容易更改,从而导致重新加载同一原始模块的陈旧副本。
解决方案是通过提供模块的完整路径来加载模块。他们有多种方法可以完成此任务,但对我有用的方法是this答案中的一种。首先,我必须做一个pip install import_file
,然后:
from import_file import import_file
traylist = import_file(traylist_path)