从 select 位置导入 Python 模块

Importing Python modules from a select location

假设我有三个脚本。 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 从 select 位置读取导入以便移动可执行文件?

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

编译 Main.py

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

link 所有 exe 都在 C:--runtime-tmpdir PATH

我正在努力寻找有关从 exe 甚至 "one dir" 文件夹中获取导入的文档。从一开始就有很多关于获取导入的内容,但是关于从 select 位置获取导入的内容并不多,所以我可以 运行 exe 在任何地方。更重要的是,如果不反编译它,甚至很难在 pyinstaller 中找到模块,这加剧了这种混乱。

也许……

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

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

虽然我没有创建目录。如何从 select 位置获取进口商品。

另一种可能solution:

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

尽管如您在 image 中看到的那样,假设我们想要 pandas 有几个文件可供选择...

我在 PyInstaller 切换到 3.0 版时遇到了同样的问题,Nuitka 帮我解决了。

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

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

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

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

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

结果: 较小的文件。

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