a_sue’s diary

a_sue の日記 はてなブログ版

iOSの最強無敵なプログラミング環境 Pythonista 3 を使えるようにした

Pythonに興味を持ってから、いろいろ本を見たりネットを調べたりしてたんだけど、iOSのアプリPythonista 3が凄いらしい。

‎「Pythonista 3」をApp Storeで
iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る
Pythonista 3にシェル、Dropbox同期・ダウンロード機能などAppleが許さない機能を追加する
Pythonistaを使ってみて ( ソフトウェア ) - tsukada816のブログ - Yahoo!ブログ

こいつは面白そうだけど、1200円かぁ。
と思ってしばらく保留。



ってことで、買ったのが先週。

前記のサイトを参考にStaShを入れたり、DropboxSyncを入れたり。
その後でptinstallerを入れたら、DropboxSyncが2種類になってしまった。

ptinstallerから入れたDropboxSyncはなぜかアップロードしかしてくれないみたい。
で、Pythonista 3にシェル、Dropbox同期・ダウンロード機能などAppleが許さない機能を追加するで入れたDropboxSyncv2はガンガンダウンロードしてくれるけど、.DS_Storeファイルでエラーになる。
.DS_Storeって何?とググったら、Mac関係のファイルなのね。

.DS_Store とは - Amarronの日記

で、対策をググるとヒットしたのがここ

Error when uploading a directory to Dropbox including all files and sub-directories with Dropbox Python API - Stack Overflow

なるほど、そうすればいいのか。
ってことで、このファイルを書いて
DropboxIgnore.py

IGNORED_FILES = ['desktop.ini', 'thumbs.db', '.ds_store', 'icon\r', '.dropbox', '.dropbox.attr', '.dropbox_state_v2']

def is_ignored(filename):
    filename_lower = filename.lower()
    for ignored_file in IGNORED_FILES:
        if ignored_file in filename_lower:
            return True
    return False

DropboxSyncv2.pyにis_ignored(path)でスキップする処理を追加。

(前略)
import DropboxIgnore as di
(中略)
    def download(self, client, path):
        if di.is_ignored(path):
            return

        print('\tDownloading:', path)
(中略)
    def upload(self, client, path):
        if di.is_ignored(path):
            return

        print('\tUploading:', path)
(後略)

想定外だったのは、ptinstallerのDropboxSyncと交互に試したりしたので、iPad Air上で修正したコードが、先にDropboxからダウンロードされたファイルで上書きされて失われたり、それを避けようとしてWindows上のPyCharmで書いたコードのIGNORED_FILESがタイプミスで意味なかったり、つまらないミスが続いて何度やってもダメだったこと。
冷静になって一つ一つ潰していったら、DropboxSyncv2.pyでダウンロードとアップロードがちゃんと最後まですすみ、iPad AiriPod touchからやっても問題なく同期できるところまで行った。
ただし、同期中にPokemon GOをやりまくってたりすると途中でエラーが発生して止まったりするけど。

とりあえず、これで環境が整った。
これでどこでも言語処理100本ノック 2015が出来るぞ。