从选定位置导入Python模块

时间:2017-12-02 16:36:45

标签: python pandas selenium compression pyinstaller

假设我有三个脚本。 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复制到主文件夹中,并且所有依赖项运行良好。

image

存在两个问题:

问题在于尺寸。一个文件将其减少到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"文件夹中获取导入的文档。从get get开始有很多进口,但从选择位置获取进口并不多,所以我可以在任何地方运行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中看到的那样,但我们可以说我们想要大熊猫有几个文件可供选择......

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我对此进行了进一步调查,并认为解决方案here是我追求的答案

目前无法使用onefile。

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

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

结果: 文件较小。

我可以在那台电脑上运行这些exe吗?可悲的是,没有没有没有打包的多包装捆绑。你可以创建一个快捷方式,虽然没有我想象的那么糟糕。虽然他们可能会在将来解决这个问题,但与此同时,这个解决方案仍然可以达到目标。如果我错了,请随意纠正我,但我很满意这个解决方案。