ヘッダーナビゲーション

2018年7月14日土曜日

Macでのpython-pclのインストール方法

Mac OS X 10.12.6にPCLのPythonバインディングであるpython-pclをインストールをしようとして少し嵌ったので解決法を書いておきます。

環境

今回用いた環境はこんな感じです
・Mac OS X 10.12.6
・Python 3.6.0 :: Anaconda custom (64-bit), anaconda3-4.3.0
・pcl: stable 1.8.1, brewでインストールされたもの

手順

  1. brewを入れる
  2. brewを使ってpclをインストールする
    1. brew install pcl  を実行
  3. python-pclをインストールする
    1. git clone https://github.com/strawlab/python-pcl.git を実行しpython-pclをcloneする
    2. python-pcl下にある、travis/pcl-2d-1.8.pcというファイルを/usr/local/lib/pkgconfigにコピーする
    3. setup.py中のhttps://github.com/strawlab/python-pcl/blob/ba8627a7d8ac30513d12e9a8b8a69db041c71ffc/setup.py#L584 の辺りに、 ext_args['extra_compile_args'].append("-stdlib=libc++")を追記
    4. ダウンロードしたディレクトリ中で、python setup.py installを実行する
以上でpython-pclがインストールできるはずです。
使うときはPython上でimport pclと書くとimportできて使えるはずです。
手順中の3.3が分かりにくい場合は、3.1の代わりに3.3の変更を加えたあとのhttps://github.com/kushanon/python-pcl.gitをcloneして使ってもらえれば3.3は省くことができます。

2018年7月8日日曜日

Pythonのimportの挙動

Pythonのimportはsys.pathにリストとして入ってるディレクトリを検索します
sys.pathは以下のディレクトリ で初期化されています。
  • 該当スクリプトが含まれるディレクトリ
  • 環境変数であるPYTHONPATHに含まれるディレクトリ
  • インストールに依存するデフォルトのディレクトリ

一時的に追加するときは、
import sys
sys.path.append("importできるようにしたいディレクトリ")
また、sys.pathに含まれるディレクトリ下にある場合でも、配下のディレクトリに "__init__.py"ファイルが含まれていないとimportすることはできない。"__init__.py"には何も書いてなくても良く、あることが重要・

例えば、example_package下のhoge.pyを実行したい時、
example_package/
    hoge.py
    __init__.py
上記のようにhoge.pyに内容を書き__init__.pyを書き、PYTHONPATHなりをexample_packageディレクトリに通した状態で、
from example_package import hoge
のようにすると適切にhoge.pyを読み込むことができます。example_package配下に更にファイルがある場合も同様で、各下位ディレクトリに__init__.pyが必要です。
__init__.pyは何も書いてなくても良いのですが、そのディレクトリ下のファイルで共通して行う必要がある処理などあればここに書いておけばまとめて実行してくれるので便利です。
また、from example_package import *のように書きたい場合は、__init__.pyの中で
__all__ = ["hoge"]
のように書くと、__all__のリストに設定されたスクリプトを"from example_package import *"と書くことで一括でimportすることができます。
※ * を多用するのは、productionコードでは望ましくないことと言われていますが

参考: https://docs.python.org/3.8/tutorial/modules.html#packages