実際何が使えるんだろう、ってのが、綺麗な形でまとまってるわけでもないので。
プロジェクトのソースから辿るのが結構キビシイので実機から情報拾ってしまおうと。以前やったのとおんなじ発想。
ただし、今回は「標準は除外して列挙」したい。kivyLauncher で固有の「非標準」を拾いたい。
ので、kivyLauncher 環境(現時点の Python は 2.7.2) からの列挙のうち ワタシの場合は Windows での Python 2.7.9 の「標準」に含まれるものは除外、としたい。
まず Windows 側で「標準」はおそらくこうだと思う:
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点セット:
1 title=Enumerate KivyLauncher Packages
2 author=hhsprings
3 orientation=all
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()
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.pickle
と result_android.pickle
が取れたので、あとは出力:
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 入ってると随分世界が違うぞい。とてもシンプルには「超弩級高機能計算機」なんぞはすぐに作れちゃうしな。