【问题标题】:Importing Python modules from a select location从选定位置导入 Python 模块
【发布时间】:2018-05-16 13:01:03
【问题描述】:

假设我有三个脚本。 Main.py(包含所有导入)、1.py(随机脚本)、2.py(随机脚本)。

pyinstaller -F --onedir Main.py (80mb)
pyinstaller -F --onedir 1.py (80mb)
pyinstaller -F --onedir 2.py (80mb)

这会创建 3 个文件夹,然后我将 1.exe 和 2.exe 复制到包含所有依赖项的主文件夹,并且运行良好。

存在两个问题:

问题在于尺寸。一个文件减少到 30mb,一个文件夹保持在 80mb

更重要的是,exe 无法离开该文件夹。我不得不求助于在 Python 中使用快捷方式。

我正在关注this,据说这是一种解决方法。

我的问题是,如何使用 pyinstaller 从选定位置读取导入,以便移动可执行文件?

逻辑: 使用pyinstaller -F –onefile Main.py (15mb).编译Main.py

C:\13\ 创建文件夹,这样exe 看起来像C:\13\Main.exe

链接C:\13的所有exe文件? --runtime-tmpdir PATH

我很难找到有关从 exe 甚至 "one dir" 文件夹中获取导入的文档。从一开始就有很多关于导入的内容,但从选定位置获取导入的内容不多,因此我可以在任何地方运行 exe。更重要的是,在 pyinstaller 中甚至很难找到模块,除非对其进行反编译,从而增加了这种混乱。

也许……

pyinstaller -F --runtime-tmpdir C:\13 --onefile 2.py

pyinstaller -F --runtime-tmpdir C:\13 --onedir 3.py

虽然对我来说没有创建目录。如何从选定位置获取导入。

另一个可能的solution

  if getattr(sys, 'frozen', False): 
      os.path.join(sys._MEIPASS, "C:\aa")

尽管您可以在 image 中看到,但可以说我们想要 pandas,但有几个文件可供选择...

【问题讨论】:

  • 来自 pyinstaller 的文档有详细的章节介绍如何打包多个共享相同依赖项的 exe:pyinstaller.readthedocs.io/en/stable/…
  • @FlorentB。 “此功能在 PyInstaller 3.0 版本中被破坏”

标签: python pandas selenium compression pyinstaller


【解决方案1】:

当 PyInstaller 切换到 3.0 版时,我遇到了同样的问题,Nuitka 为我解决了这个问题。

您可以将Main.py 捆绑到.pyd lib 文件中,然后为1.py2.py 创建可执行文件,这将从这个“dll”导入所有需要的包。因此,您可以在启动可执行文件之前将您的 lib 文件放入特定位置并相应地设置 PYTHONPATH(例如,在批处理文件中或直接在您的 shell 配置中)。

【讨论】:

  • 我过去使用过 Nuitka,设置起来非常混乱和错误。我花了一整天的时间处理无数的设置错误,这些错误并不有趣,而且关于这些问题的文档也很少。如果您可以提供更深入的指南,我觉得其他人可能会从中受益。我非常喜欢 Pyinstaller,因为它有很好的文档 + 支持,所以仅仅使用“Nuitka”可能没有帮助 xD
【解决方案2】:

我对此进行了进一步调查,并相信here 提出的解决方案是我想要的答案

无法使用 onefile,因为此功能目前已被破坏。

解决我的第一个问题,UPX 和虚拟目录。最后,将所有文件放入一个目录。最后,像我在图片中所做的那样将 exe 放在文件夹中意味着我有一个缩小的文件。

我可以通过 python 脚本创建快捷方式(如果这仍然是一个问题),但是没有真正的需要,并且在我发现的一个文件夹中运行所有 exe 已经非常好。他们将来可能会修复 onefile,但我对这个解决方案非常满意。

结果: 较小的文件。

我可以在这台电脑上的任何我想要的地方运行这些 exe 吗?可悲的是,并非没有损坏的多包捆绑包。您可以创建一个快捷方式,但这并不像我想象的那么糟糕。虽然他们可能会在未来解决这个问题,但与此同时,这个解决方案会尽可能好。如果我错了,请随时纠正我,但我对这个解决方案很满意。

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2023-04-08
    相关资源
    最近更新 更多