2401_83981953 2024-05-28 12:34 采纳率: 50%
浏览 18

我的两个py文件打包不了,并且不能把subprocess库打包进去

我有两个文件main.py和tailor.py,main可以通过按一个按钮打开tailor(两文件通过subprocess关联)
用pyinstaller打包,只把main.py打包了,不能把tailor打包进去,此时打包代码是

pyinstaller -F -w main.py -p tailor.py

打包后main可以正常运行,但通过main.exe不能打开tailor,当我把tailor.py和main.exe放在同一文件夹下,又可以正常打开tailor。当我把含有tailor.py和main.exe的文件夹发给我的朋友电脑时,发现又不能通过main.exe打开tailor。
请问有什么办法能把两个py文件打包成一个exe,并把subprocess一起打包进去。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-28 12:34
    关注

    引自免费微信小程序:皆我百晓生

    为了将两个Python脚本main.pytailor.py以及所需的依赖项(如subprocess库)一起打包为一个可执行文件,你需要确保在打包过程中正确处理它们的关系。这里是一个详细的步骤指南:

    1. 确保已经安装了PyInstaller。如果没有,可以通过pip安装:

      pip install pyinstaller
      
    2. 首先,尝试不指定 -p 参数来打包main.py,这会创建一个包含所有依赖项的捆绑包。在命令行中执行:

      pyinstaller -F -w main.py
      

      这将会在dist目录下生成一个包含main.exe的文件夹。

    3. 如果上述步骤失败,或者没有正确地将tailor.py包含在内,你可以手动指定所有依赖的模块。首先,创建一个名为hook-tailor.py的钩子文件,在这个文件中告诉PyInstaller如何处理tailor.py。在这个钩子文件中写入:

      from PyInstaller.utils.hooks import collect_data_files
      
      datas = collect_data_files('tailor')
      
      hiddenimports = ['tailor']
      

      保存并关闭此文件。

    4. 在命令行中再次打包,这次添加--additional-hooks-dir参数来指向你刚刚创建的钩子文件:

      pyinstaller --additional-hooks-dir=./hooks -F -w main.py
      

      其中./hooks应该替换为钩子文件的实际路径。

    5. 打包完成后,检查dist/main文件夹中的内容。你应该能看到tailor.py及其相关文件已经被打包进去了。

    6. 将整个dist/main文件夹(包括main.exetailor.py和其他依赖项)复制到其他计算机上测试,确认是否能正常工作。

    7. 如果还有问题,可能是因为某些依赖项没有被正确识别。在这种情况下,你可能需要检查你的项目是否有导入特定库的地方,比如import tailor。确保所有的依赖都已被正确导入,然后按照上述步骤重新打包。

    8. 最终,如果你的程序需要运行时动态加载tailor.py,你可能需要调整你的代码结构,以便在运行时从正确的位置加载它。例如,你可以将tailor.py作为数据文件而不是一个模块来处理,然后在运行时使用open()函数读取它的内容。但是,通常情况下,直接将tailor.py打包为一个模块会更简单,除非有特殊原因要求这样做。

    以上步骤应该能帮助你解决打包问题。如果仍然遇到困难,请提供更多信息,例如错误消息或项目的具体结构,这样我可以提供更具针对性的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月28日