Py2app:不允许操作

时间:2015-10-18 11:27:07

标签: python macos pygame py2app

我想创建一个名为“躲避球”的应用程序。我有我的主脚本(使用pygame)和我的setup.py脚本。我需要一个名为ball.bmp的图片。

在我的setup.py脚本中,我有以下代码:     来自setuptools导入设置

APP = ['dodgeball.py']
DATA_FILES = ["ball.bmp"]
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

每当我尝试使用终端中的以下内容制作应用程序时:

python setup.py py2app

一切都可以达到

*** creating application bundle: dodgeball ***

然后它返回一个错误:

error: [Errno 1] Operation not permitted: '/Users/**********/Desktop/Dodgeball/dist/dodgeball.app/Contents/MacOS/dodgeball'

如果有帮助,请访问Mac OS X El Capitan(10.11)。我知道El Capitan就像任何Apple更新一样,会有新的软件和功能可能会破坏这样的东西。

问题

如何修复此错误,然后允许py2app创建一个功能齐全的应用程序?

6 个答案:

答案 0 :(得分:7)

将操作系统升级到OS X El Capitan(10.11.2)后,使用py2app打包应用程序时出现类似错误:

*** creating application bundle: MyApp ***
error: [Errno 1] Operation not permitted: '/Users/jake/work/my-app/dist/MyApp.app/Contents/MacOS/MyApp'

我做了一些研究并找到了解决方案:1)禁用SIP; 2)删除Python.framework上的受限文件标志。它对我有用。

禁用SIP

  1. 重新启动Mac。

  2. 在OS X启动之前,按住Command + R并保持按住直到看到Apple图标和进度条。发布。这会引导您进入Recovery。

  3. 从Utilities菜单中,选择Terminal。

  4. 在提示符下键入以下内容:

    csrutil status
    csrutil disable
    reboot
    
  5. 您可以按照上述步骤重新启用SIP,但使用:

    csrutil enable
    

    参考文献:

    删除受限文件标记

    sudo chflags -R norestricted /System/Library/Frameworks/Python.framework
    

    正如https://forums.developer.apple.com/thread/6987

    中提到的那样

答案 1 :(得分:2)

不要使用py2app提供的系统。运行这个解决了我的问题:

pip install --user --ignore-installed py2app

(我通常对需要禁用系统完整性保护的事情保持警惕)

答案 2 :(得分:2)

我遇到了同样的问题。而不是运行

python setup.py py2app

我试过

python3 setup.py py2app

它运作得很好。希望这会有所帮助。

答案 3 :(得分:1)

如果您构建并安装自己的py2app而不是依赖于捆绑操作系统,则不会发生这种情况。

在virtualenv中,安装Mercurial(如果需要),然后:

pip install hg+https://bitbucket.org/ronaldoussoren/py2app/

py2app应该可以毫无问题地工作。

答案 4 :(得分:0)

我在我的Mac版本Sierra 10.12上遇到了同样的错误。我的灵感来自@Nicholas Riley的答案。

我的问题的背景:

  • 使用pandas和easygui
  • 构建一个简单的应用程序
  • 在virtualenv工作
  • 已通过运行$ py2applet --make-setup MyApplication.py
  • 生成了setup.py
  • py2app已在全球范围内安装,但尚未在我的virtualenv
  • 中安装
  • virtualenv未激活

我的解决方案:

激活virtualenv

Spievats-MacBook-Pro:EasyGuiTest user$ source bin/activate

在virtualenv中安装py2app

(EasyGuiTest) Spievats-MacBook-Pro:EasyGuiTest brady$ pip install py2app

再次运行py2app

(EasyGuiTest) Spievats-MacBook-Pro:EasyGuiTest brady$ python setup.py py2app -A

这完美无缺!我希望它可以帮助别人。

答案 5 :(得分:0)

有同样的问题。 由于你们所有人都已经安装了py2app,因此请先将其卸载。

pip3 uninstall py2app

此后,至关重要的是使用-U标志重新安装它。

请按照以下步骤操作:

pip3 install -U py2app

py2applet --make-setup YourApp.py

python3 setup.py py2app -A

在您的dist/文件夹中,现在应该有一个可运行的应用程序。

然后您可以使用python3 setup.py py2app

对其进行重建

在OS X Catalina&Mojave上验证