March 27, 2015

在 OSX 10.10.2 Yosemite 上安裝 PyUserInput (python 2.7.8)

在 OSX 10.10.2 Yosemite 上安裝 PyUserInput (python 2.7.8)

PyUserInput 在 Mac 上執行需要兩個 python modules: Quartz, AppKit


目錄


(一) 安裝 PyUserInput

到 PyUserInput 的 Github 下載或 clone 到自己電腦。

python setup.py install

更多資訊請參考 Installing Python Modules

由於我們作業系統是 OSX ,因此安裝完成後會顯示找不到兩個 python modules:

Missing dependency, could not import this module: Quartz
Missing dependency, could not import this module: AppKit

不同作業系統需要不同的依存檔案,PyUserInput 官方的安裝說明如下:

Depending on your platform, you will need the following python modules for PyUserInput to function:
- Linux - Xlib
- Mac - Quartz, AppKit
- Windows - pywin32, pyHook


(二) 安裝相依的 Python Modules

1. Quartz 與 AppKit

這篇討論 得知,pyobjc 包含了 Quartz。

這篇討論 得知,pyobjc 包含了 AppKit。

故我們真正需要的是 pyobjc 這個 module。

2. 安裝 pyobjc

首先,如果沒有 pip 的話先用 easy_install 安裝 pip。

easy_install pip

接著用 pip 安裝 pyobjc

pip install pyobjc

如果一切順利的話,就安裝成功了。

3. 編譯器無法正常編譯

不過我運氣不好,用 pip 無法正常安裝,將錯誤訊息丟 google 後發現是編譯器有問題。

解決方法:

依照 這篇文章 說明,開啟 xCode,讓她自動更新 Command Line Tools。

如果還沒安裝 Command Line Tools 的話,開啟 xCode 後,到 preference -> component 安裝。

之後照著 這篇文章 的指令安裝 pyobjc。

$ env CC=clang pip install -U pyobjc-core
$ env CC=clang pip install -U pyobjc

註:文章原文的指令有錯,應為 pip install -U 才對,原文漏打了一個 install。

(三) 檢查相依的 Python Modules,確認安裝完成

安裝完 pyobjc 後,檢查目前的 module list。

pip list

應該會看到一堆 pyobjc-framework 開頭的 module,例如

pyobjc (3.0.4)
pyobjc-core (3.0.4)
pyobjc-framework-Accounts (3.0.4)
pyobjc-framework-AddressBook (3.0.4)
pyobjc-framework-AppleScriptKit (3.0.4)
pyobjc-framework-AppleScriptObjC (3.0.4)
pyobjc-framework-Automator (3.0.4)
pyobjc-framework-CalendarStore (3.0.4)
pyobjc-framework-CFNetwork (3.0.4)
pyobjc-framework-Cocoa (3.0.4)
pyobjc-framework-Collaboration (3.0.4)
pyobjc-framework-CoreData (3.0.4)
pyobjc-framework-CoreLocation (3.0.4)
pyobjc-framework-CoreText (3.0.4)
pyobjc-framework-CoreWLAN (3.0.4)
pyobjc-framework-DictionaryServices (3.0.4)
pyobjc-framework-DiskArbitration (3.0.4)
pyobjc-framework-EventKit (3.0.4)
pyobjc-framework-ExceptionHandling (3.0.4)
pyobjc-framework-FSEvents (3.0.4)
pyobjc-framework-InputMethodKit (3.0.4)
pyobjc-framework-InstallerPlugins (3.0.4)
pyobjc-framework-InstantMessage (3.0.4)
pyobjc-framework-LatentSemanticMapping (3.0.4)
pyobjc-framework-LaunchServices (3.0.4)
pyobjc-framework-PreferencePanes (3.0.4)
pyobjc-framework-PubSub (3.0.4)
pyobjc-framework-QTKit (3.0.4)
pyobjc-framework-Quartz (3.0.4)
pyobjc-framework-ScreenSaver (3.0.4)
pyobjc-framework-ScriptingBridge (3.0.4)
pyobjc-framework-SearchKit (3.0.4)
pyobjc-framework-ServiceManagement (3.0.4)
pyobjc-framework-Social (3.0.4)
pyobjc-framework-StoreKit (3.0.4)
pyobjc-framework-SyncServices (3.0.4)
pyobjc-framework-SystemConfiguration (3.0.4)
pyobjc-framework-WebKit (3.0.4)

這樣就完成了。

最後再跑個簡單的 PyUserInput 範例測試看看:

from pymouse import PyMouse
from pykeyboard import PyKeyboard

m = PyMouse()
k = PyKeyboard()

x_dim, y_dim = m.screen_size()
m.click(x_dim/2, y_dim/2, 1)
k.type_string('Hello, World!')

(四) Reference

VoiceTube 看影片學英文