代码之家  ›  专栏  ›  技术社区  ›  Frak

在pyinstaller生成的.exe中动态导入自生成的python文件

  •  0
  • Frak  · 技术社区  · 6 年前

    Pyinstaller 3.4 Python 3.7 (Windows 7)

    foo.py ,生成 traylist.py 我要从中导入内容的文件。 偶尔得更新一下 纸盘列表.py 文件。因此,有必要 能够导入那个 纸盘列表.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 ). 但是,当我创建 --onefile .exe使用pyinstaller时,traylist模块中的值永远不会刷新。我已经用sys.\u MEIPASS检查了路径,可以看到MEIxxx文件夹中生成的新文件。我只是无法让.exe正确地重新加载该模块。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Frak    6 年前

    事实证明,虽然pyinstaller允许您捆绑其他类型的文件并通过 sys._MEIPASS 这条路,对我来说并不适用 import module 声明。它有一种单独的方法来处理这些类型的文件,并且不能轻易地进行更改,从而导致重新加载相同原始模块的过时副本。

    解决方案是通过提供模块的完整路径来加载模块。他们有各种各样的方法来实现这一点,但对我有效的方法是 this 回答。首先我要做一个 pip install import_file ,然后: from import_file import import_file traylist = import_file(traylist_path)