【问题标题】:pyinstaller exe without any dependencies?pyinstaller exe 没有任何依赖项?
【发布时间】:2018-01-23 14:22:33
【问题描述】:

所以我将 pyinstaller 与 python27 一起使用,只要它与构建文件夹位于同一目录中,我的 exe 就可以很好地工作。我需要它是一个完全独立的 exe,没有任何依赖关系,有没有办法将构建文件夹中的重要内容捆绑到一个文件中? -F 和 --onefile 似乎都没有这样做。

编辑:正如我在下面的回答中解释的那样,我认为 pyinstaller 是问题所在,因为 exe 只能在 dist 文件夹中运行,所以我认为它在那里有依赖关系,但实际上,它正在运行然后立即崩溃只在 exe 在桌面上时触发的错误。

【问题讨论】:

    标签: python dependencies pyinstaller


    【解决方案1】:

    我发现它不起作用的原因与 pyinstaller 或 dll 无关。该 exe 正在打开,并试图通过 python 输入 powershell 命令,就像它应该做的那样。不幸的是,我有一行代码是这样说的:

    subprocess.check_output('schtasks /create /sc minute /mo ' + str(time) + ' /tn "test_process_to_run_every_'+str(time)+'_min" /tr //'+sys.argv[0],shell=True)
    #set this exe to run every X minutes in windows scheduled tasks
    

    问题是当我将 exe 放在桌面上时 sys.argv[0] 发生了变化,最终变成了一条看起来像 C://Users/John Smith/Desktop 的路径。 John 和 Smith 之间的空间让 powershell 发疯并导致程序崩溃,所以我使用这行代码将其转义:

    path = sys.argv[0].replace(" ","^")
    

    然后我用我的新路径变量替换了 sys.argv[0]。希望这对将来尝试做同样事情的人有所帮助。

    【讨论】:

      【解决方案2】:

      pyinstaller将你的脚本转换成.exe后,你需要将executable添加到path,否则你必须打开文件所在目录下的command line@987654330 @ 只是将您的 scriptpy interpretor 放入一个文件中。 linux 也一样。

      对于依赖方面,看here

      还有其他选项你可以尝试bbFreeze、py2exe、cx_Freeze

      以简单的方式使用pyinstaller:

      pyinstaller --onefile your_file.py
      

      现在您应该看到几个文件构建,dist(exe 在这里)。

      注意:--onefile 标志不一定摆脱它与某些库的链接的需要,它仍然需要这些才能运行。

      准备分发,首先需要获取一个spec文件:

      获取规范文件: pyinstaller --noconsole your_file.py

      您可以像这样获取用于分发的 exe 文件:

      pyinstaller your_file.spec
      

      更多信息和教程看here

      看看nuitka 是否适合你,这听起来可能很吓人,但事实并非如此。它将您的代码编译为可执行的二进制格式。请注意,它首先转换为 c++ API 调用。

      如果你不喜欢闭源程序使用Cython,不喜欢使用py2exe

      【讨论】:

      • 所以无法在 pyinstaller 中捆绑依赖项?它所做的只是将脚本和解释器结合起来?
      • 事实上,pyinstaller 会查看所有的导入语句,但是如果它遗漏了一些东西,你可以在 pyinstaller 上添加额外的文件,或者额外的导入路径
      • 试试 py2exe,我认为这可能更容易使用
      • 我刚刚阅读了您发布的文档,看起来“捆绑到一个文件”正是我想要做的,但文档没有显示任何示例代码来说明如何做到这一点。如果您知道如何捆绑到一个文件中,您可以将其发布为答案吗?
      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多