LeapMotion v2 中文文档
  • Introduction
  • 语言
    • Introduction
    • C++
      • 文档概述(v2.3)
      • 骨骼追踪模型概述
      • API 综述
      • 设计指南
        • 菜单设计指南
        • 用户导向与教程设计指南
        • 应用展示与营销指南
        • 用户体验设计指南
      • 应用程序开发
        • SDK 库
        • 快速入门
        • 项目设置
        • 系统架构
        • 运行时配置
        • 控制器策略
      • 使用追踪 API
        • 连接到控制器
        • 追踪模型
        • 帧
        • 手
        • 手指
        • 手势
        • 触摸仿真
        • 运动
        • 坐标系统
        • 相机图像
        • 序列化追踪数据
      • API 参考
        • Arm
        • Bone
        • CircleGesture
        • Config
        • Controller
        • Device
        • DeviceList
        • FailedDevice
        • FailedDeviceList
        • Finger
        • FingerList
        • Frame
        • Gesture
        • GestureList
        • Hand
        • HandList
        • Image
        • ImageList
        • InteractionBox
        • KeyTapGesture
        • Listener
        • Matrix
        • Pointable
        • PointableList
        • ScreenTapGesture
        • SwipeGesture
        • Tool
        • ToolList
        • Vector
      • 附录
        • Leap Motion Release Notes
        • 使用 LeapMotion 控制面板
        • 使用可视化诊断工具
        • WebSocket 通信
        • 鸣谢
    • Objective-C
      • 文档概述(v2.3)
      • 骨骼追踪模型概述
      • API 综述
      • 设计指南
        • 菜单设计指南
        • 用户导向与教程设计指南
        • 应用展示与营销指南
        • 用户体验设计指南
      • 应用程序开发
        • SDK 库
        • 快速入门
        • 项目设置
        • 系统架构
        • 运行时配置
      • 使用追踪 API
        • 连接到控制器
        • 追踪模型
        • 帧
        • 手
        • 手指
        • 手势
        • 触摸仿真
        • 运动
        • 坐标系统
        • 相机图像
        • 序列化追踪数据
      • API 参考
        • LeapArm
        • LeapBone
        • LeapCircleGesture
        • LeapConfig
        • LeapController
        • LeapDelegate
        • LeapDevice
        • DeviceList
        • LeapFinger
        • FingerList
        • LeapFrame
        • LeapGesture
        • GestureList
        • LeapHand
        • LeapImage
        • ImageList
        • LeapInteractionBox
        • LeapKeyTapGesture
        • LeapListener Protocol
        • LeapMatrix
        • LeapPointable
        • LeapPointableList
        • LeapPointableOrHandList
        • Category
        • LeapScreenTapGesture
        • LeapSwipeGesture
        • LeapTool
        • LeapVector
      • 附录
        • Leap Motion Release Notes
        • 使用 LeapMotion 控制面板
        • 使用可视化诊断工具
        • WebSocket 通信
        • 鸣谢
    • Python
      • 文档概述(v2.3)
      • 骨骼追踪模型概述
      • API 综述
      • 设计指南
        • 菜单设计指南
        • 用户导向与教程设计指南
        • 应用展示与营销指南
        • 用户体验设计指南
      • 应用程序开发
        • SDK 库
        • 快速入门
        • 项目设置
        • 系统架构
        • 运行时配置
      • 使用追踪 API
        • 连接到控制器
        • 追踪模型
        • 帧
        • 手
        • 手指
        • 手势
        • 触摸仿真
        • 运动
        • 坐标系统
        • 相机图像
        • 序列化追踪数据
      • API 参考
        • Arm
        • Bone
        • CircleGesture
        • Config
        • Controller
        • Device
        • DeviceList
        • Finger
        • FingerList
        • Frame
        • Gesture
        • GestureList
        • Hand
        • HandList
        • Image
        • ImageList
        • InteractionBox
        • KeyTapGesture
        • Listener
        • Matrix
        • Pointable
        • PointableList
        • ScreenTapGesture
        • SwipeGesture
        • Tool
        • ToolList
        • Vector
    • JavaScript
      • 文档概述(v2.3)
      • 骨骼追踪模型概述
      • API 综述
      • 设计指南
        • 菜单设计指南
        • 用户导向与教程设计指南
        • 应用展示与营销指南
        • 用户体验设计指南
      • 应用程序开发
        • SDK 库
        • 快速入门
        • 项目设置
        • 系统架构
        • 运行时配置
      • 使用追踪 API
        • 连接到控制器
        • 追踪模型
        • 帧
        • 手
        • 手指
        • 手势
        • 触摸仿真
        • 运动
        • 坐标系统
        • 相机图像
        • 序列化追踪数据
      • LeapJS 插件
      • API 参考
        • Leap namespace
        • Bone
        • CircleGesture
        • Controller
        • Finger
        • Frame
        • Gesture
        • Hand
        • InteractionBox
        • KeyTapGesture
        • Pointable
        • ScreenTapGesture
        • SwipeGesture
        • Matrix
        • Vector
      • 附录
        • Leap Motion Release Notes
        • 使用 LeapMotion 控制面板
        • 使用可视化诊断工具
        • WebSocket 通信
        • 鸣谢
Powered by GitBook
On this page
  • 项目设置
  • 库
  • 包含 LeapMotion 模块
  • 支持 32 位和 64 位 Python 架构
  • 使用不同的 Python 发行版
  • 为 Python 3 重新编译 LeapPython

Was this helpful?

  1. 语言
  2. Objective-C
  3. 应用程序开发

项目设置

项目设置

这篇文章讨论如何向 Python 程序中引入 Python 库。

库

LeapMotion 的 Python API 作为 Python 扩展模块提供了一个包含 Python本身及本地代码。Python API 支持 Python 2.7。

Windows

Mac

Linux

Python模块

lib/Leap.py

lib/Leap.py

lib/Leap.py

32位本地库

lib/x86/LeapPython.pyd lib/x86/Leap.dll

lib/x86/LeapPython.so lib/x86/libLeap.so

64位本地库

lib/x64/LeapPython.pyd lib/x64/Leap.dll

lib/x64/LeapPython.so lib/x64/libLeap.so

通用二进制本地库

lib/LeapPython.so lib/libLeap.dylib

你可以在下载的 LeapMotion SDK 包的lib文件夹中找到这些库文件。在 WIndows 和 Linux 上,32位 Python 需要使用 x86的库文件,64位的 Python 需要使用 x64 的库文件。

LeapMotion 没有把库作为一个标准的 Python 包直接安装到用户电脑上。而是把库作为你应用的一个内置模块,你应该吧库和你的应用程序一起发布。

包含 LeapMotion 模块

为了引入 Leap 模块,这些苦文件必须放置到和 Python 运行时可以找到的地方。最简单的方法就是把库文件和程序代码放到同一个目录中。Python 会在同一个目录里导入这个模块。

如果你想把库放在与你源码不同的目录,你可以在引入模块前把库文件的路径添加到sys.path中:

import sys
sys.path.insert(0, "path/to/leap/libraries")
import Leap

例如,你项目的文件结构可以像这样:

SnakesAndLadders/
    src/
        Snakes.py
        Ladders.py
    lib/

你也可以将 LeapMotion 库文件拷贝到lib子文件夹中(确保复制的是适合你的平台架构的文件)。比如在 Mac 上,你的项目结构可以这样:

SnakesAndLadders/
    src/
        Snakes.py
        Ladders.py
    lib/
        Leap.py
        LeapPython.so
        libLeap.dylib

于是你可以使用下面的方法在Snakes.py或者Ladders.py中引入 Leap 模块:

import sys
sys.path.insert(0, "../lib")
import Leap

这种引入的方式假设你的 Python 文件总是运行在当前工作目录下运行。为使得主程序能够从任何位置运行时都能正常工作,你可以使用 Pythoninspect模块获取包含源文件的路径并设置sys.path关联到那个文件件:

import os, sys, inspect
src_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
lib_dir = os.path.abspath(os.path.join(src_dir, '../lib'))
sys.path.insert(0, lib_dir)
import Leap

注意:如果你开发的程序只为你自己使用,你可以把 Leap 模块和其他需要的库放在任何位置,比如其中一个文件夹放置sys.path变量,另一个文件夹是你的PYTHONPATH环境变量等等。只需在更新 SDK 的时候你还能记得你把它们放到哪儿了。然而,自从 Leap 模块目前不在 Python 包管理器有效,不推荐吧 LeapMotion 拷贝到 Python 标准模块索引的位置。这样做会导致多个程序尝试安装他们不同的 LeapMotion 库时而发生冲突。

支持 32 位和 64 位 Python 架构

要同时支持 Windows 和 Linux 32位及64位架构,你可以运行时检查然后用 sys.path 设置正确的文件即可。在 Mac 中,LeapMotion 库是通用二进制的,支持两种架构,这种技术是不需要的。

以 SnakeAndLadders 为例,在程序里你应该吧两种库都分别放到两个文件夹中,例如:

SnakesAndLadders/
    src/
        Snakes.py
        Ladders.py
    lib/
        x86/
            Leap.py
            LeapPython.so
            libLeap.so
        x64/
            Leap.py
            LeapPython.so
            libLeap.so

然后引入合适的 Leap 模块:

import os, sys, inspect
src_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
arch_dir = '../lib/x64' if sys.maxsize > 2**32 else '../lib/x86'
sys.path.insert(0, os.path.abspath(os.path.join(src_dir, arch_dir)))

import Leap

相同的办法你可以同时支持更多平台。

使用不同的 Python 发行版

在 Mac、Linux、或者自荐的 Python 中使用 LeapMotion 的 Python 库,你必须更新 LeapPython.so 的加载路径到 Python 的相应实例。

首先,运行otool工具来显示当前的加载路径:

otool -L LeapPython.so

显示结果与下面很相似:

LeapPython.so:
    @loader_path/LeapPython.so (compatibility version 0.0.0, current version 0.0.0)
    /Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
    @loader_path/libLeap.dylib (compatibility version 0.7.0, current version 2.0.1)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)

Python位于 /Library/Frameworks/Python.framework/Versions/2.7/Python 这行,它需要用install_name_tool工具来修改。

其次,使用 install_name_tool 工具把 Python 的路径修改到你所需要的位置,例如:

install_name_tool -change /Library/Frameworks/Python.framework/Versions/2.7/Python \
/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib \
LeapPython.so

注意:otool和install_name_tool都是标准的 Linux 和 OS X 命令行工具。

为 Python 3 重新编译 LeapPython

Previous快速入门Next系统架构

Last updated 5 years ago

Was this helpful?

LeapMotion SDK 包含的 LeapPython 库文件只支持 Python2.7。然而 SDK 还包含 SWIG 结构文件,它可以用来生成 LeapPython 源代码。所以,高级用户可以生成并编译他们自己的 LeapPython。作为指导,请参考。

使用 SWIG2.0.9 生成 Python3.3.0 包