【问题标题】:How to build MacOSX executables on Travis CI?如何在 Travis CI 上构建 MacOSX 可执行文件?
【发布时间】:2015-06-17 17:11:11
【问题描述】:

我有一个只依赖于 wxPython 的小型 python 程序。我在 Linux 上开发了这个,并设法在 Travis CI(github 上的 seguid_calculator)上使用 wine 设置了 Windows 可执行文件的自动构建。

我的解决方案结合了最近的 wine 版本和 Pyinstaller。

我想为 MacOS 做类似的事情。我知道 Travis 上也有一个 MacOSX 构建环境。我对 MacOSX 操作系统的经验为零,而且我没有 Mac。我知道您可以使用称为“自制软件”的东西安装第三方软件包

有没有我想做的例子?一个示例 travis.yml 文件会很棒!

感谢您的任何意见, /比约恩

* 编辑 *

我创建了一个只打开一个窗口的示例 wxpython 应用程序。它位于https://github.com/BjornFJohansson/macapp。 我使用下面的 .travis.yml 生成不起作用的可执行文件。

os:
- osx
language: objective-c
python:
- '2.7'
before_install:
- brew update
- brew outdated xctool || brew upgrade xctool
- brew install python
- brew install wxpython
- pip install pyinstaller
- pyinstaller --noconsole --onefile hw.py
- ls
- ls dist/
- hdiutil create dist/hw.dmg -srcfolder dist/ -ov
install: true
deploy:
  skip_cleanup: true
  provider: releases
  api_key:
    secure: VK1oVWQCRomgcFNVua00B3YSsotezzU1p6/fh73/0vwQFzVMolVnAsnfSq6EAwIcJvakU0TI9pqZR+0S3PKnUs+Kn3Ar8OwQ88t2azZNwewBfKua3tM2/7BF4y7O0gOtN1F29Yxyu0zPInIVY17BqGygibQ1kthBTm+tj3YyNW8=
  file: 
    - "dist/hw"
    - "dist/hw.dmg"
  on:
    tags: true
    all_branches: true
    repo: BjornFJohansson/macapp

基本上,我首先更新 xtools(我见过很多人这样做,所以我决定也这样做)。然后我 brew install python 和 wxpython。然后我 pip install pyinstaller。我使用 pyinstaller 命令在 ./dist 下生成可执行文件 (hw) 和“hw.app”文件夹。

我没有设法部署 .app 文件夹,所以我使用 hdiutil 创建了一个 .dmg。 然后我部署到 github 版本。

有人能告诉我这个设置有什么问题吗?

travis 日志可以在这里找到:https://travis-ci.org/BjornFJohansson/macapp

【问题讨论】:

    标签: python macos wxpython


    【解决方案1】:

    This 声明他们目前不接受新的“多操作系统”请求,因此在 Travis CI 升级之前,无论如何您都无法为 OS-X 构建。

    一般来说,你需要被多操作系统接受,然后将os: os-x 添加到你的.travis.yml 文件中,(可能在一个分支上),然后寻找如何在 OS-X 中设置 python、pyinstaller 和 wxpython - 所有 3 人的主页在这方面都非常有帮助。

    【讨论】:

      【解决方案2】:

      您不需要 os: 部分。

      我在使用 Travis CI 在 Mac OSx 上部署 wxPython 应用程序时遇到了类似的问题。不幸的是,我的设置有点复杂,但它可能有助于解决您的问题。

      我正在使用 conda 构建一切。

      我的 travis 配置:

      # Mac OS X Python build
      language:
      - objective-c
      python:
      - "2.7"
      install:
      # install python via brew
      - brew install python
      # make brews python the system default
      - brew link --overwrite python
      - which python
      - python --version
      # pip init
      - pip install --upgrade pip
      # use anaconda
      - pip install conda
      - conda init
      - conda install --yes matplotlib
      - conda install --yes scipy numpy=1.8
      - conda install --yes 'numpy<1.9.0'
      - conda install --yes wxpython
      # final pip installs
      - pip install cython
      - pip install wheel
      - pip install sympy
      - pip install git+git://github.com/pyinstaller/pyinstaller.git@779d07b236a943a4bf9d2b1a0ae3e0ebcc914798
      # show packages
      - pip freeze
      # build extensions
      - python setup.py develop
      script:
      # Create wheel pacakge
      - python setup.py bdist_wheel
      # Create binary
      - ./freeze_pyinstaller/macOSx_bundle_script.sh
      before_deploy:
        - export RELEASE_PKG_FILEA=$(ls ./dist/*bin.zip)
        - export RELEASE_PKG_FILEB=$(ls ./dist/*app.zip)
        - export RELEASE_PKG_FILEC=$(ls ./dist/*.whl)
        - echo "deploying $RELEASE_PKG_FILEA to GitHub releases"
        - echo "deploying $RELEASE_PKG_FILEB to GitHub releases"
        - echo "deploying $RELEASE_PKG_FILEC to GitHub releases"
      # This section was created with
      # sudo apt-get install ruby1.9.1-dev
      # sudo gem install travis
      # travis setup releases
      deploy:
        provider: releases
        api_key:
          secure: gQu6BKSo5sucrieOvyLz/kn5Ai+vrnXK6Kdm+WMqzXE6keE0LzujXOHWQX2G2EBl1NCjzvt3HrEvJqwGEjLbduJBBPBHaOy71AfKuHaxRQPlFWMLn2iAVVval3q7xU4kEfjAdS50WmARqh6sT7gMj+pHpg1e3pz1SxybOeC40+k=
        skip_cleanup: true
        # Allow
        file_glob: true
        file: 
          - "${RELEASE_PKG_FILEA}"
          - "${RELEASE_PKG_FILEB}"
          - "${RELEASE_PKG_FILEC}"
        on:
          tags: true
          repo: paulmueller/PyCorrFit
      

      我在创建应用程序时遇到了问题(可能是由于我的古老构建系统)。因此,我不得不用包含以下内容的脚本替换 app 文件夹中的二进制文件:

      cd $(dirname "$0")
      open -a Terminal.app ./MYAPP.bin
      

      其中MYAPP 是应用程序的名称,我之前已将应用程序文件夹中的二进制文件重命名为MYAPP.bin

      应用启动时,终端会打开并启动二进制文件。

      这是使用 Travis 构建的版本:

      https://github.com/paulmueller/PyCorrFit/releases/tag/0.8.7travis2

      这是一个基于旧 MacBook 的工作版本:

      https://github.com/paulmueller/PyCorrFit/releases/tag/0.8.7

      在使用 Travis 构建的版本中,存在某种 wxpython 错误。我没有装有最新 OSx 的 Mac。看看它可能会帮助你(也许还有我)。

      【讨论】:

      • 我也在考虑一直使用 anaconda 和 conda,以后可能会考虑使用它。
      【解决方案3】:

      没有成功的原因是通过homebrew安装的wxPython版本不是32位的。您需要从 wxPython 主页安装 dmg。我在那里找到了一个脚本:https://github.com/ayufan/travis-osx-vm-templates/blob/master/scripts/packages.sh

      我 fork 你的示例并设法让它运行 (https://github.com/paulmueller/macapp/releases)。

      .travis.yml 现在看起来像这样:

      language: objective-c
      python:
      - '2.7'
      before_install:
      - which python
      - brew install python --universal --framework
      - brew install wget
      - which python
      - export VERSIONER_PYTHON_PREFER_32_BIT=yes
      - defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
      - which python
      - python --version
      # https://github.com/Homebrew/homebrew/issues/34470
      #- arch -i386 brew install wxpython --universal
      - mkdir dl
      - cd dl
      - wget http://downloads.sourceforge.net/wxpython/wxPython3.0-osx-3.0.2.0-cocoa-py2.7.dmg
      - ls
      - cd ..
      - sudo ./packages.sh
      - arch -i386 python -c "import wx; print wx.__version__"
      - arch -i386 pip install pyinstaller
      - arch -i386 pyinstaller --noconsole --onefile hw.py
      - ls
      - hdiutil create dist/hw.dmg -srcfolder dist/ -ov
      - zip -r dist/hw.zip dist/hw.app
      - ls dist/
      install: true
      deploy:
        provider: releases
        skip_cleanup: true
        api_key:
          secure: KjdN4hSHWU3ZDg6lpDNMB2we9jLayM9C8pwyQrV/Xzq8HNH5eNHP8ScI64tvnS0yJegOXnHFwUhUrkMtEs3X29TKrom+8tJ5E52IdBO7xO8fqOfeugC2239vLzc3tNI6RJX/K7CZTsSRu5U++1RJVgcWYjrCln87DuXG+HZRdOI=
        file: 
          - "dist/hw.dmg"
          - "dist/hw.zip"
        on:
          tags: true
          all_branches: true
          repo: paulmueller/macapp
      

      【讨论】:

      • 我让一个朋友在运行 Yosemite (10.10.3) 的 Mac 上测试了您的可执行文件。以下是压缩应用程序zip appdmg 的屏幕截图
      • 我会投票赞成这个答案,但我没有足够的声誉,无论如何,谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2014-12-14
      相关资源
      最近更新 更多