假设我有三个脚本。 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).
在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中看到的那样,但我们可以说我们想要大熊猫有几个文件可供选择......
答案 0 :(得分:0)
PyInstaller在切换到3.0版时遇到了同样的问题,Nuitka为我解决了这个问题。
您可以将Main.py
捆绑到.pyd
lib文件中,然后为1.py
和2.py
创建可执行文件,这将从此“dll”导入所有需要的软件包。因此,您可以将lib文件放入特定位置,并在启动可执行文件之前相应地设置PYTHONPATH
(例如,在批处理文件中或直接在shell配置中)。
答案 1 :(得分:0)
我对此进行了进一步调查,并认为解决方案here是我追求的答案
目前无法使用onefile。
解决我的第一个问题,UPX和虚拟目录。最后,将所有文件放入一个目录中。最后,像我在图片中所做的那样将exe文件放在文件夹中意味着我有一个缩小的文件。
我可以通过python脚本创建快捷方式(如果这仍然是一个问题),但是没有真正的需要并运行所有的exe文件,因为我找到了一个文件夹。他们可能会在将来修复onefile,但我对此解决方案非常满意。
结果: 文件较小。
我可以在那台电脑上运行这些exe吗?可悲的是,没有没有没有打包的多包装捆绑。你可以创建一个快捷方式,虽然没有我想象的那么糟糕。虽然他们可能会在将来解决这个问题,但与此同时,这个解决方案仍然可以达到目标。如果我错了,请随意纠正我,但我很满意这个解决方案。