我想用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 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
中)时,我在弹出窗口中收到以下错误消息
我在做什么错? 是否与我的应用程序中没有GUI框架(例如PyQT或Tkinter)有关?
答案 0 :(得分:0)
可能您需要包括某种类型的运行时库,但是另一个选择是创建一个脚本来运行您的应用程序,然后进行修复,以便您可以通过双击Finder从Finder中启动脚本,请参见{{3} },了解其他一些替代方法。
在链接的问题中提到的最简单的方法是给脚本扩展名.command
,那么您无需执行其他任何操作。
使用脚本的好处是,它是在终端(在shell中)中执行的,因此您应该自动使所有库等可用。
答案 1 :(得分:0)
我终于可以通过
建立一个独立的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_() )
然后,您将my_app.py
所在的目录cd。然后,您运行
PyInstaller my_app.py
这将创建几个目录:__pycache__
,build
和dist
。 dist
内还有一个名为my_app
的目录。在此目录中将有一个名为my_app
的可执行文件(或在路径path/to/dist/my_app/
中引用原始问题)==>双击该文件,您的应用程序正在运行!