素の kivyLauncher で使えるサードパーティモジュール・パッケージ

実際何が使えるんだろう、ってのが、綺麗な形でまとまってるわけでもないので。

プロジェクトのソースから辿るのが結構キビシイので実機から情報拾ってしまおうと。以前やったのとおんなじ発想。

ただし、今回は「標準は除外して列挙」したい。kivyLauncher で固有の「非標準」を拾いたい。

ので、kivyLauncher 環境(現時点の Python は 2.7.2) からの列挙のうち ワタシの場合は Windows での Python 2.7.9 の「標準」に含まれるものは除外、としたい。

まず Windows 側で「標準」はおそらくこうだと思う:

dump_at_win.py
 1 # -*- coding: utf-8 -*-
 2 import pkgutil
 3 import pickle
 4 import sys
 5 import os
 6 
 7 try:
 8     sys.path.remove(os.path.abspath("."))
 9 except ValueError:
10     pass
11 # avoid enumerating site specific packages
12 sys.path = [p for p in sys.path if 'site-packages' not in p.split(os.path.sep)]
13 
14 
15 #
16 result = {modname: ispkg
17           for importer, modname, ispkg in pkgutil.iter_modules()}
18 pickle.dump(result, open("result_win.pickle", "wb"))

sys.path の「site-packages」を含むパスを除外してる。たぶん合ってると思うのだが…。(無論人によって違うのは知ってる。つまり、環境変数 PYTHON_PATH に独自に追加してるケースは考えてない。) ともあれこれを PC (Windows) で実行して、result_win.pickle を。

kivyLaunher 側は「kivy アプリ」として作らなければならないのがちょいとダルいが、以下3点セット:

android.txt
1 title=Enumerate KivyLauncher Packages
2 author=hhsprings
3 orientation=all
dump_at_android.py
 1 # -*- coding: utf-8 -*-
 2 import pkgutil
 3 import pickle
 4 import sys
 5 import os
 6 
 7 
 8 try:
 9     sys.path.remove(os.path.abspath("."))
10 except ValueError:
11     pass
12 
13 
14 #
15 def dump():
16     result = {modname: ispkg
17               for importer, modname, ispkg in pkgutil.iter_modules()}
18     pickle.dump(result, open("result_android.pickle", "wb"))
19 
20 
21 if __name__ == '__main__':
22     dump()
main.py
 1 # -*- coding: utf-8 -*-
 2 from kivy.lang import Builder
 3 from kivy.app import App
 4 
 5 kv = '''
 6 BoxLayout:
 7     orientation: 'vertical'
 8 '''
 9 
10 class Hoge(App):
11 
12     def build(self):
13         import dump_at_android
14         dump_at_android.dump()
15         return Builder.load_string(kv)
16 
17 if __name__ == '__main__':
18     Hoge().run()

これを android 機の /sdcard/kivy/enum_pkgs とかに放り込んで kivyLauncher から起動。これでダンプされた result_android.pickle を PC に持ち帰る。(ちなみにアタシは DropBox で行き来してる。)

これで result_win.pickleresult_android.pickle が取れたので、あとは出力:

print_result.py
1 # -*- coding: utf-8 -*-
2 import pickle
3 
4 result_android = pickle.load(open("result_android.pickle", "rb"))
5 result_win = pickle.load(open("result_win.pickle", "rb"))
6 result = {k: result_android[k] for k in result_android if k not in result_win}
7 print("\n".join(["%s %s" % ("P" if result[k] else " ", k) for k in sorted(result.keys())]))

結果:

  1   ArgImagePlugin
  2   BdfFontFile
  3   BmpImagePlugin
  4   BufrStubImagePlugin
  5   ContainerIO
  6   CurImagePlugin
  7   DcxImagePlugin
  8   EpsImagePlugin
  9   ExifTags
 10   FitsStubImagePlugin
 11   FliImagePlugin
 12   FontFile
 13   FpxImagePlugin
 14   GbrImagePlugin
 15   GdImageFile
 16   GifImagePlugin
 17   GimpGradientFile
 18   GimpPaletteFile
 19   GribStubImagePlugin
 20   Hdf5StubImagePlugin
 21   IcnsImagePlugin
 22   IcoImagePlugin
 23   ImImagePlugin
 24   Image
 25   ImageChops
 26   ImageCms
 27   ImageColor
 28   ImageDraw
 29   ImageDraw2
 30   ImageEnhance
 31   ImageFile
 32   ImageFileIO
 33   ImageFilter
 34   ImageFont
 35   ImageGL
 36   ImageGrab
 37   ImageMath
 38   ImageMode
 39   ImageOps
 40   ImagePalette
 41   ImagePath
 42   ImageQt
 43   ImageSequence
 44   ImageShow
 45   ImageStat
 46   ImageTk
 47   ImageTransform
 48   ImageWin
 49   ImtImagePlugin
 50   IptcImagePlugin
 51   JpegImagePlugin
 52   McIdasImagePlugin
 53   MicImagePlugin
 54   MpegImagePlugin
 55   MspImagePlugin
 56   OleFileIO
 57 P OpenSSL
 58 P PIL
 59   PSDraw
 60   PaletteFile
 61   PalmImagePlugin
 62   PcdImagePlugin
 63   PcfFontFile
 64   PcxImagePlugin
 65   PdfImagePlugin
 66   PixarImagePlugin
 67   PngImagePlugin
 68   PpmImagePlugin
 69   PsdImagePlugin
 70   SgiImagePlugin
 71   SpiderImagePlugin
 72   SunImagePlugin
 73   TarIO
 74   TgaImagePlugin
 75   TiffImagePlugin
 76   TiffTags
 77   WalImageFile
 78   WmfImagePlugin
 79   XVThumbImagePlugin
 80   XbmImagePlugin
 81   XpmImagePlugin
 82   _imaging
 83   _imagingmath
 84   _io
 85   _webdebugger
 86 P android
 87 P audiostream
 88   console
 89 P cymunk
 90 P docutils
 91 P ffmpeg
 92   future_builtins
 93   inspector
 94 P jnius
 95   jnius_config
 96   keybinding
 97 P kivy
 98 P lxml
 99   monitor
100 P numpy
101 P plyer
102 P pygame
103 P pygments
104   recorder
105   screen
106   six
107   syslog
108   termios
109   touchring
110 P twisted
111   webdebugger
112 P zope

あらぁ? pygments とかは知ってたけど、numpy 入ってんの? すげー。ずっと入っていないもんだと思い込んでた…。試してみたら確かに使えた。

numpy 入ってると随分世界が違うぞい。とてもシンプルには「超弩級高機能計算機」なんぞはすぐに作れちゃうしな。