Apple是否接受Python应用程序在新的Mac App Store上发布?
如果是这样,应该如何打包应用程序?py2app足够吗?别的什么?
我想创建一个应该在Windows和Mac上运行的GUI应用程序.为此,我选择了Python.
问题出在Mac OS X上.
有两种工具可以为Mac生成".app":py2app和pyinstaller.
问题是:
PS我使用两台电脑(Windows和Mac),Python 2.7,wxPython,py2exe,py2app和pyinstaller.
另外,我检查了这些网站:
我使用Python 2 Tkinter和PyObjC,然后我使用py2app.
程序工作正常,但是每当我打开程序时窗口都会以隐藏的方式启动,所以直到我点击停靠栏上的图标才能显示它.
有没有办法控制这个,让窗口在应用程序启动时打开的其他窗口的顶部?
只是为了澄清,它不必在应用程序运行的整个过程中处于顶部.我只是需要它在其他窗口启动时.
我正在使用 PySide2 GUI 开发一个简单的 Python 应用程序。它目前在 Windows、Linux 和 Mac 上运行良好。在 Windows 上,我可以使用 PyInstaller 和 InnoSetup 来构建一个简单的安装程序。然后我尝试在 Mac 上做同样的事情。它很快就崩溃了,因为系统拒绝启动 PyInstaller 生成的命令或应用程序,因为它没有正确签名。因为我不是苹果开发者,所以我不能签署任何东西......
经过一番研究,我尝试了 py2app。我可以在这里更进一步。和
python setup.py py2app -A
Run Code Online (Sandbox Code Playgroud)
我可以创建一个可运行的应用程序。显然不能移植到不同的系统,因为它使用我的开发文件夹。如果我使用python setup.py py2app生成的程序无法启动,因为 py2app 没有复制所有必需的 Qt 东西。我试着将缺失的库一一添加,但最后系统找不到插件,我放弃了......
有人可以帮助我使用 Qt GUI 将 python 脚本或包转换为 Mac 上的便携式应用程序吗?理想情况下,配方应该说明如何使用自定义应用程序图标,但这不是必需的。
由于我的真实包对于 SO 问题来说太大了,因此我将其缩减为最小的可重现示例:
from PySide3.QtWidgets import *
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
hello = QLabel('Hello', self)
hello.move(50, 50)
def run(args):
app …Run Code Online (Sandbox Code Playgroud) 虽然有很多这样的问题,请跟我说,因为我认为我的不同......
我有一个5美元的Python应用程序,我使用py2exe,py2app和Linux的源代码分发.该应用程序具有一年的许可证,因此人们需要在一年后升级到更新的版本.我想添加一些简单的许可证保护来强制执行一年的限制.由于应用程序只有5美元,我不在乎它是否容易绕过.只是有一些东西会鼓励许多用户在一年后支付5美元升级而不是忽略许可.
注意:
我的第一个想法是简单地记录安装日期(例如,使用wxConfig)并在一年后使用礼貌消息禁用软件以请升级.
有没有更好的解决方案呢?
所以我有一个很好的OS X的python应用程序.它运行一个外部终端脚本,我想在我的python应用程序中包含它.理想情况下,我能够运行py2app并将此脚本捆绑到可执行文件中,然后能够包含它并在我的代码的python部分中运行它.这可能吗?
提前致谢!
额外编辑:我正在使用的脚本已编译.我不能只看里面粘贴它.
我使用py2app 0.9上Mac OSX Yosemite 10.10.1运行Python 3.4,从蟒蛇分布,并用Tcl 8.5.
在早期的尝试中,构建会失败,但快速搜索会显示这些问题的解决方案(即包括'packages':['tkinter', 'matplotlib']在OPTIONS中setup.py,并更改第49行MachOGraph.py:loader - > loader_path)
现在py2app完成构建,并在Alias模式下运行我的应用程序功能,但是当我在普通模式(python setup.py py2app)中构建时,生成的应用程序将无法打开,并且控制台显示以下回溯:
回溯(最近一次调用最后一次):文件"/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ boot .py",第355行,在_run()文件"/ Users/ryankeenan /桌面/钓鱼/ gui_test/dist/deani.app/Contents/Resources/boot .py",第336行,在_run exec(编译(源,路径,'exec'),globals(),globals())文件"/用户/ ryankeenan /桌面/钓鱼/ gui_test/dist/deani.app/Contents/Resources/deani.py",第731行,在app = fishingapp()文件"/ Users/ryankeenan/Desktop/fishing/gui_test/dist/deani .app/Contents/Resources/deani.py",第536行,在init tk.Tk中.init(self,*args,**kwargs)文件"/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/lib/python3..py",第1851行,在init self.tk = _tkinter.create(screenName,baseName,className,interactive,wantobjects,useTk,sync,use)_tkinter.TclError
令人沮丧的是,它不会为"_tkinter.TclError"打印任何错误消息.我搜索了很多,没有找到任何解决方案或这个问题的复制品.我已经尝试构建各种基于tkinter的应用程序,它们都以同样的方式失败.
这是在第一次拨打tk.Tk时发生的.我的代码中的init(self,*args,**kwargs).
我的setup.py文件如下所示:
from setuptools import setup
APP = ['deani.py']
DATA_FILES = []
OPTIONS = {'packages': ['tkinter','matplotlib'],'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES, …Run Code Online (Sandbox Code Playgroud) 我打算为Mac和Windows构建一个GUI应用程序.我一直在研究技术选择,如语言,库和构建工具,这样我就可以在两个平台之间共享尽可能多的代码.
主要要求是:
我的帖子的长度已经失控,所以我把我的问题作为摘要移到了顶部,而上下文更进一步.
对于Mac,我排除了使用跨平台GUI库(如QT),因为它似乎不能在Mac上提供原生外观(看起来不合适和/或难以编写跟随Apple的应用程序)人机界面指南).wxWidgets说它使用本机库,但是这篇文章提到wxPython可能使用私有的Objective-C调用,并且不太可能被批准用于Mac App Store.最后,即使外观正确,两个平台的布局可能仍需要改变.
因此,我计划在Mac界面中使用原生Cocoa GUI库,但仍考虑将wxWidgets用于Windows GUI.
对于主应用程序逻辑来说,似乎我最好的语言选择是C++或Python.显然,使用Python编写跨平台代码比使用C++更容易,但总是存在权衡.
蟒蛇
优点:更快写入和更容易维护.强大的跨平台库,可以大大缩短开发时间.
缺点:使用Python意味着使用PyObjC,它已经超过一年没有更新(从svn可以看出),我不清楚它是否仍然适用于未来版本的Xcode和OSX.此外,使用PyObjc和py2app设置任何理智的构建配置,并在Xcode之外使用xibs进行GUI,这是一场噩梦.
C++
优点:更容易在Mac和Windows上设置构建配置和依赖项.运行速度比Python快得多,但在我的情况下性能并不是一个大问题.
缺点:我不懂C++.我对C非常好,但看起来这并不能帮助我写好C++.我的总体印象是编写跨平台C++要困难得多,但我可能错了.有很多关于晦涩的错误的帖子.虽然Boost看起来很有希望.
如果在两个平台上使用C++作为主要语言,那么设置起来似乎很简单.如果我使用Python,在Windows上设置似乎也很简单,因为我会使用wxWidgets进行GUI和py2exe部署.
至于Mac和Python,标准选择似乎是pyobjc和py2app.不幸的是,我没有找到任何使用pyibapp构建配置的例子,它使用XIB和Cocoa库而不是QT或wxWidgets.我不希望Xcode管理构建,因为我更喜欢将Python文件和应用程序资源放在Xcode项目目录之外.这将大大简化Windows的设置并使文件树更清晰.
关于QT的编辑:我再看看QT,花了几个小时和QT设计师一起玩.基本UI元素(按钮,文本字段,标签)看起来与Cocoa元素相同.我轻松地将QWindow和QTabView与一些元素组合在一起,它看起来像一个Cocoa应用程序.但是,有一些负面因素:
我知道我很挑剔,但需要挑剔才能做出好的UI.整体QT似乎是Windows的一个很好的解决方案,但我想我会坚持使用Cocoa for Mac.我对现有程序进行了一些额外的研究,发现VLC,Chrome和Transmission都为Mac制作原生GUI,而VLC使用QT for Windows,Chrome使用自定义框架,而Transmission使用GTK +和QT for Linux.
我想我已经决定使用Cocoa GUI for Mac和Qt或wxWidgets for Windows,但仍然在C++和Python之间分配共享逻辑.
由于某些原因我无法解释或google,即使用最简单的例子,py2app也会崩溃.我使用python 3.4.1虚拟环境创建,Projects/Test/virtenv其中py2app通过pip安装.
这是输出$pip list:
altgraph (0.12)
macholib (1.7)
modulegraph (0.12)
pip (1.5.6)
py2app (0.9)
setuptools (3.6)
Run Code Online (Sandbox Code Playgroud)
foo.py是一个保存在Projects/Test /中的hello world示例文件,包含一行:
print('hello world')
Run Code Online (Sandbox Code Playgroud)
setup.py保存在Projects/Test中,生成者$py2applet --make-setup foo.py:
"""
This is a setup.py script generated by py2applet
Usage:
python setup.py py2app
"""
from setuptools import setup
APP = ['foo.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)
这是运行的完整输出$python setup.py py2app(所有pip和python命令都是在激活虚拟环境的情况下完成的):
running py2app
creating /Users/mik/Desktop/Projects/Test/build
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone/app …Run Code Online (Sandbox Code Playgroud) 我想为我的 Python 代码制作一个 Mac 可执行文件,但总是收到以下错误消息:
OSError:找不到 Python 库:.Python、libpython3.5.dylib、Python
PyInstaller 和 py2app 都返回了相同的错误。我应该怎么做才能克服这个问题?