0

我想用 MacOS(10.14)上的脚本制作一个独立的可执行文件。

该脚本是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 问题中的步骤,我在中按顺序输入了以下命令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)时,我在弹出窗口中收到以下错误消息

在此处输入图像描述

我究竟做错了什么?这是否与我的应用程序中没有 GUI 框架(如 PyQT 或 Tkinter)这一事实有关?

4

2 回答 2

0

Mist 可能需要包含某种运行时库,但另一种选择是创建一个脚本来运行您的应用程序,然后进行修复,以便您可以通过双击从 Finder 启动脚本,请参阅此问题以了解一些替代方法做。

链接问题中提到的最简单方法是为脚本提供扩展名,.command然后您不需要做任何其他事情。

使用脚本的优点是它在终端(在 shell 中)中执行,因此您应该自动获得所有库等。

于 2019-02-24T08:16:49.210 回答
0

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

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

my_app.py 应如下所示:

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_() )

然后你 cd 所在的目录my_app.py。然后你运行

PyInstaller my_app.py

这将创建几个目录__pycache__builddist。里面dist还有一个名为my_app. 在此目录中将有一个名为my_app(或指原始问题,在路径内path/to/dist/my_app/)的可执行文件 ==> 双击它,您的应用程序正在运行!

于 2019-02-24T12:55:27.420 回答