如何在 Travis CI 上构建 MacOSX 可执行文件?

How to build MacOSX executables on Travis CI?

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

我的解决方案结合了最近发布的 wine 和 Pyinstaller。

我想为 MacOS 做类似的事情。我知道 Travis 上也有一个 MacOSX 构建环境。我对 MacOSX os 的体验为零,而且我没有 Mac。我了解到您可以使用名为 "homebrew"

的东西安装第三方软件包

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

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

* 编辑 *

我创建了一个示例 wxpython 应用程序,它只能打开一个 window。它位于 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 安装 pyinstaller。我使用 pyinstaller 命令生成可执行文件 (hw) 和 ./dist.

下的 "hw.app" 文件夹

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

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

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

This 声明他们目前不接受新的 "multi-os" 请求,因此在 Travis CI 之前,您将无法在任何情况下为 OS-X 构建已升级。

一般来说,您需要获得 multi-os 的录取,然后将 os: os-x 添加到您的 .travis.yml 文件中,(possibly 在一个分支上),然后在 OS-X 中查找如何设置 python、pyinstaller 和 wxpython - 所有 3 个的主页在这方面都非常有帮助。

您不需要 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

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

cd $(dirname "[=11=]")
open -a Terminal.app ./MYAPP.bin

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

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

这是使用 Travis 构建的版本:

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

这是一个基于旧Mac书籍的工作版本:

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

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

之所以不行,是因为homebrew安装的wxPython版本不是32位的。您需要从 wxPython 主页安装 dmg。我在那里找到了一个脚本:https://github.com/ayufan/travis-osx-vm-templates/blob/master/scripts/packages.sh

我分叉了你的例子并设法得到它 运行 (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