代码之家  ›  专栏  ›  技术社区  ›  ecjb

在MacOS上创建一个独立的可执行文件“我的应用程序遇到了致命错误,现在将终止”

  •  0
  • ecjb  · 技术社区  · 5 年前

    剧本是 my_app.py

    #!/usr/bin/env python
    
    import os.path
    import csv
    import pandas as pd
    
    ##1 open the file
    f=open("path/to/original_file.txt", "r")
    
    filedata = f.read()
    ##1
    
    ##1.1 replace the desired characters
    filedata = filedata.replace("\\", ",")
    filedata = filedata.replace("*", "")
    
    with open("path/to/new_file.txt", 'w') as file:
      file.write(filedata)
    ##1.1
    

    setup.py 文件:

    from setuptools import setup
    
    APP = ["my_app.py"]
    DATA_FILES = []
    OPTIONS = {
        "argv_emulation": True,
        "packages": ["certifi"],
    }
    setup(
        app = APP,
        data_files = DATA_FILES,
        options = {"py2app": OPTIONS},
        setup_requires = ["py2app"]
    
    )
    

    遵循前面的步骤 SO questions with answer ,我在中按顺序输入以下命令 Terminal

    pip install virtualenv
    virtualenv venv --system-site-packages
    source venv/bin/activate
    pip3.7 install -U py2app
    cd /path/to/my_app.py
    python setup.py py2app -A
    

    但是当我双击 my_app.app /Users/mymac/Documents/applications/myapp/dist )我在弹出窗口中得到以下错误消息

    enter image description here

    1 回复  |  直到 5 年前
        1
  •  0
  •   Joakim Danielson    5 年前

    您可能需要包含某种类型的运行时库,但另一种选择是创建一个脚本来运行应用程序,然后进行修复,这样您就可以通过双击Finder来启动脚本,请参见 this question 寻找一些替代方法。

    链接问题中提到的最简单的方法是给脚本加上扩展名 .command 那你就不需要做别的了。

        2
  •  0
  •   ecjb    5 年前

    我终于可以建立一个独立的

    • 围绕PyQt框架包装应用程序
    • 使用 PyInstaller 构建应用程序

    我的_应用程序类型应该是这样的:

    import sys
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
    from PyQt5.QtCore import QSize
    
    class HelloWindow(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
    
            self.setMinimumSize(QSize(640, 480))
            self.setWindowTitle("Hello world")
    
            centralWidget = QWidget(self)
            self.setCentralWidget(centralWidget)
    
            gridLayout = QGridLayout(self)
            centralWidget.setLayout(gridLayout)
    
            title = QLabel("Hello World from PyQt", self)
            title.setAlignment(QtCore.Qt.AlignCenter)
            gridLayout.addWidget(title, 0, 0)
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        mainWin = HelloWindow()
        mainWin.show()
        sys.exit( app.exec_() )
    

    my_app.py 居住。然后你就跑

    PyInstaller my_app.py
    

    __pycache__ , build dist . 内部 另一个目录名为 my_app 我的应用程序 (或参考原始问题,路径内部) path/to/dist/my_app/

    推荐文章