読者です 読者をやめる 読者になる 読者になる

J's blog

趣味で統計•データ解析をしています

Pythonでlightblueを入れたときのなぐり書き

bluetooth通信をMacでするために必要なlightblueを入れる際に苦労したのでメモ。

環境

第一の壁

公式サイトから落としたファイルでやったときも試しましたが、そっちのエラーの方がイミフで解決不能だったので、githubから落とします。
適当なフォルダに移動してファイルを落としましょう。

$ cd python/tmp
$ git clone https://github.com/0-1-0/lightblue-0.4

解凍します。

$ tar xzvf lightblue-0.4.tar.gz

解凍したら、そのフォルダに移動して、とその前に必要なパッケージを入れないといけません(どこかに書いてあったような気がするだけでいらないかもしれないです)。

$ pip install pyobjc

をしておいて下さい。 それでは

$ sudo python setup.py install

でインストールです。本来ならこれでうまくいくとおもうのですが、僕の場合はだめでした。
こんな具合でエラーが出れば僕と一緒です。

$ sudo python setup.py install
running install
running build
running build_py
running install_lib
running install_egg_info
Removing /***/***/***/lib/python2.7/site-packages/lightblue-0.4-py2.7.egg-info
Writing /***/***/***/lib/python2.7/site-packages/lightblue-0.4-py2.7.egg-info
Build settings from command line:
    ARCHS = $(NATIVE_ARCH_ACTUAL)
    DEPLOYMENT_LOCATION = YES
    DSTROOT = /
    INSTALL_PATH = /Library/Frameworks

=== BUILD TARGET LightAquaBlue OF PROJECT LightAquaBlue WITH CONFIGURATION Release ===

Check dependencies
No architectures to compile for (ARCHS=$(NATIVE_ARCH_ACTUAL), VALID_ARCHS=i386 x86_64).

** INSTALL FAILED **


The following build commands failed:
    Check dependencies
(1 failure)

正しい解決策かどうかわかりませんが、やってみたことを羅列しておきます。

  • setup.pyのline66の-arch 'x86_64'を取り除く
  • src/mac/Lightblue/Lightblue.xcodeprojをXcodeで開き、Build SettingのArchitecturesのReleaseをppc i386からNative Architecture of Build Machine (x86_64)に変更
  • 同じファイルについて、Build SettingのValid Architecturesをi386 x86_64からx86_64のみに変更

これをしたら再び、

$ sudo python setup.py install

と唱えます。さあimport lightblueと入力してみましょう!
何も言われなければ成功です!僕の場合はだめでした!

第二の壁

さてさきほどのコマンドでエラーがでてしまった僕ですが、エラー内容は以下のとおりです。

>>> import lightblue
/***/***/***/lib/python2.7/site-packages/objc/_bridgesupport.py:643: RuntimeWarning: Error parsing BridgeSupport data for IOBluetooth: PyObjCRT_SkipTypeSpec: Got '0x29' at end of union encoding, expecting '0x29'
  warnings.warn("Error parsing BridgeSupport data for %s: %s" % (frameworkName, e), RuntimeWarning)

ただこのバグは解決済みのようでした。しかしpipで入れたもの(3.0.4)は解決前でしたので、 https://bitbucket.org/ronaldoussoren/pyobjcから最新のものを落としましょう。
そんでもってディレクトリ移動してインストール。

$ cd ronaldoussoren-pyobjc-**********/pyobjc-core
$ sudo python setup.py install

エラーも吐かずに終えたので、import lightblueを試したところ、無事に成功しました。