Mac で brew upgrade したら tkinter が見つからなくなったが、解決した話

一年ほど前、Intel Mac で tkinter をいじっていたとき、いくらがんばっても日本語入力の時の選択肢を表示させる方法がうまくいかなかったので、しばらく tkinter 含めた Python の GUI からは離れていました。が、最近読み始めた本で tkinter を使っていたので気分が乗って、改めていろいろ試したところ、ハマった後に解決できたのでその方法のご紹介です。

結論から先に言うと、答えは brew info python に書いてあった

brew で Python を 3.9.1 から 3.9.6 にアップグレードしたときのログはロクに見ていなかったのですが、一晩寝かせた後に brew info python を叩いてみたところ、やるべきことが書いてあり無事解決できました。下の (略) に挟まれた部分です。tkinter はもう Python 3 に含まれ無くなったけど、まだインストールできますよ、という事を言っています。

% brew info python3
python@3.9: stable 3.9.6 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
(略)
tkinter is no longer included with this formula, but it is available separately:
  brew install python-tk@3.9
(略)

というわけで、もし brew upgrade で python3 を 3.9.x にアップグレードした後に tkinter が動かなくなった場合は、brew install python-tk@3.9 で tkinter も別途インストールしてあげてください。

ほんの最近まで、多分去年くらい?までの情報では「Python で GUI やるなら、まずは標準で入っている tkinter を試しましょう」と書かれていると思うんですが、少なくとも Mac の brew によるインストールでは標準では入っていない、ということですね。

動かなくなったときのエラーはこんな感じ

% python3 -m tkinter
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 188, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 147, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 111, in _get_module_details
__import__(pkg_name)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tkinter/__init__.py", line 37, in
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

動かなくなった当日は、pipenv だとモジュールを読み込んでくれないような気がしていてずいぶんと余計な遠回り。一晩寝かせて Python 環境全体の再構築までを覚悟したものの、pipenv の外でも動かない。やったことをイチから見直して答えにたどり着けてヨカッタです。

NEW Fire HD 10 をポチってしまった話 2021年 4月

やっぱり発表された Amazon の Fire HD10 新モデル

ボクの推しは NEW Fire HD 10 Plus さんです!

「やっぱり」というのは別に、Apple の新製品発表にぶつけてくるだろうなんて予想をしていたわけでは無く、ギズモードさんで変な記事を読んだからです。2021.04.14 のこれです:

https://www.gizmodo.jp/2021/04/amazon-firehd10-sale.html

要約すると、セールも終わっているのになぜか、Fire HD 10 の 64GB モデルは 5,000円オフの 14,980円、キッズモデルの 64GB は 8,980円オフだからポチろう、という記事です。

まず、Fire HD 10 ってどうなんか

本ブログの別記事でも取り上げていますが、Fire HD 10 は画面が大きく雑誌や技術書を読むのに便利で、Kindle Unlimited で読み放題を満喫するなら是非手に入れるべきデバイスだと思っています。スマホと比べると映像の迫力も大違いです。Kindle Unlimited を利用していなくても、Amazon Prime の会員特典をエンジョイできるメディアプレイヤーという観点で言えば、第一候補にしていいと思います。ボクは第 7世代の Fire HD 10 を持っていて、Amazon コンテンツ以外では、abema で格闘技などを見ながら家の中をうろうろするようなシーンでも活躍してくれています。独自のアプリストアのラインナップを気にするとか、SaaS やクラウドを利用して仕事やクリエイティブなことにも使い倒してやろう、なんて色気を出してはいけません。家の外に持ち出すことも考えない方がいいでしょう。自宅の Wi-Fi 環境でスタンドに立ててメディア鑑賞、これが Fire HD 10 の使い方です。そしてその用途であれば、十分に満足させてくれます。

NEW Fire HD 10 はどうなんか (この商品の発売予定日は2021年5月26日です)

と、高級品の iPad ではないことを十分に認識し、IT リテラシーを存分に効かせて上手に付き合っている第 7世代 Fire HD 10。でも、もどかしいところすらかわいい、なんて言える心に余裕が無いときには、雑誌の表紙をザッピングする時の動きだけでイライラしちゃいます。スクロールしようとしているのに、指を置いた位置がわるくて詳細ページが開いちゃうなんてのはざらで、見るものが決まるまではある程度の忍耐が必要なんです。んで、ギズモードさんの紹介してくれた、なぜかセールが続いていた Fire HD 10 は、どうも評価が低い。発売当初ソフトウェアの問題があったようで、それが大きく影響しているような感じではありますが、スペックを見ると大きな画面に対して RAM の容量が少ない感じ (2GB)。ボクがジェフベゾさんの手下だったら、これをラインナップに入れ続けるより、RAM を増やした新製品を出すだろうし、そのために少しでも在庫を整理したいし、ということは、さらにそのためにメディアにも協力してくれるよう相談するな。ははぁ〜ん、こりゃ出るな、新機種、と様子をうかがっていたところに Fire HD 10 新機種発表のニュースが各メディアに載りました。しかもスペック違いの 2機種あり、無印でも 3GB、Plus は RAM を 4GB 積んでいる。他にも違いがあるようですが、後で付け足すことのできない RAM はなるべく大きくしておきたいので、Fire HD 10 Plus を推しとして今後のレビューを楽しみにすることとしました。ボクの M1 Mac mini も最初から 16GB の RAM を積んでいます。後で追加することはできないので。

【表示されている方限定】という割引がまた来おった

ボクは 20年?ほど前、会費無料期間中に解約することを忘れた時から Amazon Prime 会員を続けているからか、ちょいちょい「お客様限定で○○% オフ」等のオファーをうけています。最初は多分、ドットの荒い Kindle で、980円みたいな価格だったので即ポチり、まもなく解像度の高い機種が発売されました。この時は、きっとそんなことだろうとは思いつつも、ずっと気になっていた新テクノロジの E Ink を手に入れられてウハウハしたものです。次は確か初代の Fire TV Stick で、日本での一般発売に先立って予約してくれたら割引してくれるというので、即ポチりました。初代 Echo dot もおそらく同じような割引があったのでやはり即ポチり、今ではこういうファミリー構成になっています。

Fire は HD 8 と HD 10。Kindle はジャギジャギなのと、縁に段差の無い Paperwhite。Fire TV はそれぞれ初代と 4k の Stick。Paperwhite はもう一世代古いのも買ったけど、妻にあげたので表示されていません

そして推しの NEW Fire HD 10 Plus のレビューを待つと決め、NEW Fire HD 関連のページをジロジロ行ったり来たりしていたところ、こんなページが表示されました。

画像のリンク先は Fire HD 10 Plus です。ボクの推しの。

されど、Plus だけは 20% OFF にあらず

キャプチャの通り、ボクの推しの Fire HD 10 Plus は対象外、とは言いつつも何かの手違いで Plus も 20% OFF が適用されちゃったりするんじゃなかろうかと、ねちょねちょと Fire HD 10 の各ページを行ったり来たりしましたが、いくら頑張ってみても 3GB RAM の通常モデルと全部乗せ風エッセンシャルセット、Kids モデルのみが 20% OFF。推しの 4GB RAM 搭載 Plus ちゃんには割引は適用されません。こんなにたくさんの Amazon デバイスを買っているボクだけど、これ以上の特別扱いはしてくれないようです。残念。。。だけど、ポチりました。3,196円引きになった、推しじゃ無い方の 【NEWモデル】Fire HD 10 タブレット 10.1インチHDディスプレイ 32GB ブラックを。12,784円で。わはは!リンクを張っていますが、ボクみたく Prime 会員でいろいろ買っていないと割引は無いんじゃないかと思いますので、表示されていない方は Cyber Monday (年末) あたりまで待ってみてください。ちなみに、これまでの Fire HD タブレットシリーズは SD カードにアプリやコンテンツを保存できるため、使っていない SD カードを持っている人は大きなストレージのモデルを選ぶ必要はないです。上にも書いたように Wi-Fi 環境で使うことが前提のデバイスなので、なおさら大きな内蔵ストレージは必要ないですね。

結局何を言いたいのかというと

どんなに好きな人の言うことも 100% 真に受けちゃいかんよ、少しでもなんか変だな、とおもったら自分の心の声に従った方がいいよ、ということ。いつもは Mac の在庫がなくなってきたら新製品が出そうですよ、とアドバイスをくれる G さんが、よくわかんないけど安売りしてるから買っちゃえ、なんて言ってるのはどう考えてもアヤシイと疑ったボクは、ちょっと安く最新モデルの Fire HD 10 をポチれました、という自慢話でした。おしまい。

Parallels Desktop 16 for Mac 早期ゴールデンウィークプロモーションで 25% オフ (2021年 4月 29日現在) (5月 3日改訂)

Parallels Desktop 16 for Mac が 25% オフのキャンペーンやってます

先日 M1 プロセッサ正式対応版のバージョン 16.5 が発表されたばかりの Parallels Desktop for Mac ですが、早期ゴールデンウィークプロモーションということで 25% オフのキャンペーンやっています。いつまで適用されるのかわからないので、気になっている方はこの機会にえいやっと入手してしまってはいかがでしょうか。

Parallels 日本語サイト

Parallels Desktop の簡単な説明と我が家での用途

Parallels Desktop for Mac とは、Mac 上で他の OS を実行する仮想環境です。Windows 10 や各種 Linux 等の OS を、Safari やメール等のアプリケーションと同じように Mac OS の上で動かすことができます。Mac ではリリースされていない Windows 用アプリケーションやゲームを実行することができるわけです。ボクの子供は Intel CPU が乗った数年前の iMac で Parallels Desktop を実行し、そこで Windows 10 Home 64bit を実行、その上でゆっくりムービーメーカー4を使って YouTube 動画を編集しています。編集中の動画再生はカクカクしており、書き出しの時間も専用の PC や Bootcamp を使用した方が早いのでしょうが、一台の Mac で Mac 用と Windows 用のアプリケーションを行ったり来たりしながら作業ができる、というのは実に快適です。OS やハードウェアに自分のやりたいことが制限されない、そういう自由を手に入れることができるのが、Parallels Desktop for Mac なのです。

一点注意すべき点は、M1 チップを搭載した Mac の場合、これまでの Intel チップ向け Mac OS や Windows を実行できないという所です。他にも、そもそもの Mac のスペックによっては実用に耐えないと言うこともあるでしょうから、不安な方は 14日間無料で利用できるトライアル版を試してみて購入の判断をするのがよいかと思います。

トライアル: https://www.parallels.com/jp/products/desktop/trial/

25% オフはなかなか大チャンス (なので、自分用にも購入)

“Parallels キャンペーン” 等とググってみると、いくつかのサイトで割引キャンペーンの情報が出てきますが、買い切り版 (アップグレードの権利は無いが、同じバージョンを追加料金なしでいつまでも使用できる) が 25% オフというのは、直販・販社経由のどちらでもなかなか無いようです。さらに、「早期ゴールデンウィーク」と謳っているので、後半にはやっていないかもしれません。というわけで、2021年 4月 25日、自分用にも買ってみました。 本記事を書いている 4月 29日現在、まだプロモーション中のようです。

買い方を簡単にご説明

https://www.parallels.com/jp/products/desktop/buy/?full

上のリンクから公式ウェブサイトにアクセスし、ライセンスを選択します。アップグレード版を使用するには、以前のバージョンの Parallels Desktop のライセンスキーを持っている必要があります。初めて購入する方は新規ライセンスを選択します。ボクはおそらく 20年ほど前に購入した Parallels Desktop 4 for Mac のライセンスがあったため、アップグレードを選択しました (これほど古くても、アップグレードできました。3,000円程度とはいえ、若き自分の投資に感謝)。

エディションは、家庭および学生向けでよいでしょう。買い切りで、Mac OS のアップグレードによって Parallels が実行できなくなるその日までは使い続けられます。

この段階ではまだ割引適用前の金額

【注意!】新規の単発購入は 9,818円ナリ (8,345円は、アップグレード権を含む年次更新サブスクの価格)

と、ここまで書いて、購入金額の不具合に気がついたので、新規購入の方は以下をお読みになった上で、金額が訂正されてからの購入にした方がよいかと思います。

新規の場合、左側の単発購入の金額は 8,345円のはずだが…

2021年 4月 29日 (祝・木) 現在、上記キャプチャの通り新規ライセンスで家庭および学生向けエディションを選び「今すぐ購入 8,345 円」をクリックした先のページでは、単発購入の価格がなぜか 9,818円になっています。クーポンコードに SAVE25 をコピペして適用をクリックしても、7,363円 (9,818円に対する 25% オフ) にしかならず、期待している 6,259円になりません。ボクが先週アップグレード版を購入したときには、3,903円 (5,204円に対する 25% オフ) になっていましたので、新規の単発購入だけの不具合の可能性があります。サポートに連絡しようとしましたが、祝日は営業していないようでしたので、フォームから訂正の依頼をしておきました。新規で購入される方は、前のページとこのページの価格を必ず確認することをお勧めします 【以下、5月 3日改訂内容】サポートに問い合わせたところ、新規の単発購入価格は 9,818円で正しく、サブスクなら 8,345円ということで、ボクの勘違いだったようです。確かに前のページでは「8,345円より」と書いてあるので、間違ってはいないですね。。。(ところで、5月 3日現在、黄金のプロモーションバナーは無くなっていますがクーポンコードは適用できるような?)

このページですることはこんな感じです:

  1. 単発購入か 1年間のサブスクリプションをクリック
  2. 左下にクーポンコード入力ボックスが無ければ、チェックを入れて表示する (上のキャプチャ参照)
  3. クーポンコード SAVE25 をコピー&ペーストして「適用」をクリック
  4. 合計金額が 25% オフになっていることを確認
  5. 氏名、住所、メアドを入力
  6. 支払い方法を指定、必要事項を入力して「次へ」

無事決済されれば no-reply@cleverbridge.com から、注文内容やプロダクトキーが書かれたメールが届きます (クレバーブリッジ社は、Eコマースパートナー企業として、Parallels の受注及び支払処理管理業務を行っているということです)。メールにあるダウンロードのリンクから Parallels Desktop をダウンロード&インストールするか、トライアル版をインストール済みであれば、プロダクトキーを入れてあげれば製品版として使用できます。

というわけで、今日はここまで

M1 チップに正式対応した Parallels Desktop 16.5 for Mac。Windows Insider Preview で Arm 版 Windows 10 をインストールしてちょろっといじっただけですが、キビキビ動いている感じです。個人的に取り立てて Windows でやりたいことも無かったので、とりあえず、ゆっくりムービーメーカー4 をインストールしてみました。使い方を知らないのであれですが、起動は確認できました。

他にもいろいろ試そうかとも思ったのですが、仕事以外で個人として Windows でやりたいことも特に無く、何かコメントいただければ試してみようと思います。

コロナ禍のゴールデンウィーク、時間はたっぷりありますからね。

Mac mini (M1, 2020) で Dell モニタの USB ポートが使えない、画面が表示されない時のワークアラウンド

Dell モニタに 20cm の USB-C の延長ケーブルを接続

Mac mini (M1, 2020) を購入した

いろんな方がレビューしてるように、パフォーマンスは素晴らしいです。アプリケーションも、Intel CPU 用機能拡張や VPN (具体的には LogMeIn HAMACHI) などシステムの深いところに食い込んだものは動かないケースが多いようですが、それ以外は概ね想定通りで、すごく満足しています。各デベロッパの対応も早く、毎週のようにサポートされるアプリケーションが増えるのを見られるのも楽しいですね。

Dell モニタの画面が映らない、USB ポートが使えない

しかし、メインで使用している Dell のモニタ P2421DC に USB-C で接続しながら同モニタの USB ポートをハブとして使用するにはコツがいることがわかりました。モニタに電源が入っている状態で Mac mini を起動すると、USB ハブにつながったキーボードから入力できないのです。映像は出力されています。Dell Latitude 5310 や XPS では当然全く発生しません。あまり気にしていませんでしたが、そういえば MacBook Air (Retina, 13-inch, 2019) でも USB-C ケーブルを抜き差ししていたことがあるので、Mac 起動時の USB 機器の接続フローと Dell モニタ側のそれがミスマッチしているように思えます。

ともあれ、日本語ではあまり同様の症状や解決策が無いようなので、投稿しておきます。

環境:

不具合の内容:

macOS 起動後、UCB-C ケーブルで接続された メインモニタのポート USB 3.0 x2 (側面)、USB 2.0 x2 (背面) に接続した機器を認識しない。キーボードやマウスからの入力も、iPad 等への給電も行えない。

下記ワークアラウンドを実行し、キーボードやマウスが使えるようになった後も、スクリーンロックしてしばらくした後にログイン使用とすると、キーボードからパスワードの入力はできるが画面がメインモニタに表示されないこともある。

不具合の再現方法:

モニタの電源が入っている (スタンバイ) 状態 で、Mac mini の電源を投入する。macOS 起動途中から画面は表示されるが、USB 機器は使用できない。

対処方法・ワークアラウンド:

Mac の起動前にできること:

Mac の電源を入れる前に、モニタの電源を切っておく。ボクの場合は HDMI 接続のモニタもあるため、そちらでパスワード入力画面が表示されてからメインモニタの電源を入れる。ごめんなさい、テストしているときはこの方法が有効だった (と少なくとも思う) のですが、最近はなぜか全くうまくいきません。以下をお試しください。

Mac の起動後にできること:

モニタとつながっている USB-C ケーブルを抜き差しします。OS が起動してしまった後では、モニタの電源 off/on では接続されません。Mac mini 背面からケーブルを抜き、モニタがスタンバイ状態に戻ったら再接続します。

ボクは少しでも簡単にケーブルの抜き差しができるようにと、USB 3.1 Gen2 規格に対応した延長ケーブルを amazon で購入しました。本投稿トップの画像のように、モニタ側にこのケーブルを挿し、画面に表示されなかったりキーボードが効かないときに矢印の部分を抜き差ししています。スイッチ付きの USB-C ケーブルを探したが信頼できそうな (Thunderbolt として使えそうな) ものが見つかりませんでした。Mac mini 本体のポートへのケーブル抜き差しに抵抗がある、設置場所的に無理という方はこちらをお勧めします。

今後の展望:

Intel チップの MacBook Air (macOS 10.15 Catalina -> 11.1 Big Sur) でも発生しますが、本体のキーボードでログインはできるし、USB-C ケーブルの抜き差しもたいした手間じゃ無い、ということであまり気にしていませんでした。設置場所によっては Mac mini のケーブル抜き差しは面倒なので、当面は Dell のモニタの電源を切る癖を付けるしかなさそう。Dell は2021年初頭までにMacバージョンのDell Display Managerを提供する (引用元) と言っているで、近い将来解決してくれると願いたいです。

Kindle fire HD 10 は、かなりオススメ

Kindle fire HD 10 はあって損無し

あまり値下げされない amazon 最大画面サイズ 10 インチタブレット、Kindle fire HD 10 が、Cyber Monday 2019 (2019/12/9 23:59まで) で値下げされています (通常価格の 6,000円オフ)。これは、買った方がいいです。

10 インチスクリーンの魅力

本記事の投稿人は前バージョンを所有していますが、10インチという画面の大きさは Kindle 本を読むのには本当に便利です。特に、自宅でパソコンの横で技術書を開くときや、リビングで雑誌を横開きで眺めるときなどには最適です。いまや Amazon Android アプリストアから abemaTV もオフィシャルでダウンロードできるので、テレビで見れない総合格闘技も綺麗に見れます。今のチャンスに、ぜひ!

リフロー版 Kindle 書籍を iPad mini (2018) と比較

僕は iPad mini (2018)Kindle fire HD 10 (2017) を持っているので、いくつか Kindle本の比較写真を載せておきます。ちなみに、2019年 12月現在で、4倍近い価格差があります。

技術書: 『基礎Python 基礎シリーズ』目次 – Kindle fire HD 10 の方が 3行多い:

基礎Python目次

次のページ:

固定画面 (紙の本のページをスキャンした電子書籍) だと縮尺の違いですが、リフロー版 (文字の大きさが変えられる Kindle 書籍) は、一画面に表示できる文字数が多いのです。

Kindle fire HD 10 だと枠内が全て表示されています。

雑誌 (固定レイアウト書籍) の比較 – 縦画面

文字サイズの変えられない、画面サイズ固定 (固定レイアウト) の雑誌だとどうでしょうか。Casa Brutas で確認です。表紙を立て画面で表示すると、Kindle fire HD 10 だと上下に無駄な余白があります。なんだか残念。

雑誌 (固定レイアウト書籍) の比較 – 横 (見開き) 画面

では、見開き (横画面) だとどうでしょうか。表紙の違い。

他のページも。雑誌は Kindle fire のほうが、いっぱいまで表示してくれて無駄がなく、実際の雑誌と近い感覚で読むことができます。ちなみに 2019年 12月にもなれば、電子書籍でもジャニーズ (Casa Brutus なら櫻井くん) もちゃんと見れます。ここには載せてないですが。

結論

自宅で技術書籍や雑誌を読むことが多い方は、Kindle fire HD 10 を買った方が幸せになれます。特に Prime 会員の方は Prime Video も 10 インチの画面で見れるので、躊躇する理由はないですね。iPhone との迫力の違いは圧倒的です。ただし、Prime Video のときの音は、ヘッドフォンをお勧めします。

Pythonista3 でコードを実行するバージョン (3 or 2) を指定

Python には 2.x 系と 3.x 系のバージョンがあり、Pythonista3 は 2.7.12 と 3.6.1 をベースに作られている

ということを知っておきましょう。Pythonista3 では、どちらのバージョンの環境でコードを実行するか選ぶことができます (下図。スクリプト名の右にある ▷ を長押し)。通常はデフォルトのバージョン 3で問題ないはずですが、2系で書かれたコードを実行する際には print 文やモジュールのインポートでエラーが出る可能性が高いです。そういう場合には 2.7 でコードを実行しましょう (Run with Python 2.7)。

6DF76B93-53C3-4D19-B1AD-37FD314A1BD5.jpeg

StaSh 上の一部コマンドは Python 2 用に書かれている

Pythonista 3 に Django や py-tree といった Python のパッケージをインストールするのに本サイトでも便利に使用させてもらっている StaSh ですが、一部コマンドは Python 2 用に書かれているもののようです。なので、StaSh インストール後に普通に起動すると、デフォルトの Python 3.6 で実行されるので、警告が表示されます。

StaSh v0.7.2 on python 3.6.1
Warning: you are running StaSh in python3. Some commands may not work correctly in python3.
Please help us improving StaSh by reporting bugs on github.

Python 3 ではうまく動作しないコマンドや、Python 2 のパッケージをインストールしたり実行するには、Python 2.7 で実行する必要があります (▷アイコン長押し、Run with Python 2.7)。そうすれば上記の警告は出ません。

StaSh v0.7.2 on python 2.7.12

というわけで、Python 2.x 用に書かれたパッケージを pip でインストールしたい場合は、そもそも実行する StaSh を Python 2 で実行しなければなりません。毎回 ▷アイコンを長押しする?ちょっとスマートじゃないですね。

コードを実行するPython のバージョン (3 or 2) を指定する

コードを作成する際、実行する Python のバージョンを指定することができます。方法は簡単で、Python 2 で実行したい場合は以下のようにコードの最初の行にバージョンを明記してあげるだけです (コードを実行する言語を指定するこの方法を Shebang と言います)。パスがない分、Linux や macOS よりも簡単です。

#! python2
# coding: utf-8
# この下にコードを書いていく

StaSh の場合、Python 3 で実行したいとき (Django のインストールなど) と Python 2 で実行したい時 (StaSh 内のコマンドが Python 3 だとエラーを吐くなど) のケースがあるため、先頭の Shebang を変更した stash2.py と stash3.py の 2つのコードを書き、それぞれショートカットとして登録しておくと便利です。

Pythonista 3 に Django 2.0 をインストールする

過去の投稿のように、バージョンを指定してあげれば Django 2.0 も Pythonista 3 にインストールできます。ただ、詳細な原因は確認できていませんが、バージョン 2.0 しか今のところインストールできません。既に Django 1.x をインストール済みの場合は、削除する必要があります。

インストール済みの Django を削除 (StaSh を使用)

pip remove django

2.0 をインストール (2.0.1 以降は、2018/3/23 現在、Python 2.7 はサポート外というエラーで失敗します。もちろん Pythonista は最新の 3.6 でもです)

pip install django==2.0

StaSh で

pip list

としてバージョンを見ると 2.0.3 などと出ますがウソです。Console で確認しましょう。

import django
print(django.VERSION)

さて、 Django 1.x でプロジェクトを作っていた場合、manage.py に runserver --noreload を arg として渡してもエラーが出ます。おきまりの再起動と manage.py の実行を何度かすると、ForeignKeyon_delete がないというエラーになる場合があります。その場合は、エラーが出ている model.py を下の太字部分 (カンマ以降、閉じ括弧まで) を追加しましょう。

author = models.ForeignKey('auth.User', on_delete=models.PROTECT)

メジャーアップデートで色々と変更があるようですが、取り合えず Pythonista on iPhone として嬉しいのは admin ページがレスポンシブデザインになったというところが大きいと思います。楽しみましょう!

iOS Pythonista 3 で XServer に SSH 接続

Pythonista 3 の StaSh を使って SSH で XServer へ接続する

Pythonista 3 の StaSh を使ってホスティングサーバである XServer へ SSH 接続する方法です。ポイントは、XServer のサーバーパネルで「公開鍵認証用鍵ペアの生成」を行わず、StaSh の ssh-keygen コマンドでパスフレーズ無しのキーを作成するということ。パスフレーズを付けて作られたキーは StaSh のssh で動かないようです。おそらく他の SSH 接続を許可するホスティングサーバでも同様の方法で接続可能かと思いますのでお試しください。
XServer の SSH 設定方法 (公式) はこちら

StaSh でキーを作成

$ ssh-keygen -t rsa -b 2048

以下のパスに秘密鍵と公開鍵が作られる。

~/Documents/site-packages/stash/.ssh
$ ls
id_rsa id_rsa.pub

後は、公開鍵を XServer のサーバパネルで登録すれば、以下コマンドでサーバに SSH 接続できる。

SSH コマンド

$ ssh username@username.xsrv.jp -p 10022

(“username” は自分のアカウント名に差し替える)

初めて ssh コマンドを実行すると、どうやら自動的に pyte というターミナルエミュレータが pip でインストールされます。そのまま ssh コマンドを実行してもエラー global name 'pyte' is not defined と表示される場合は、Pythonista 3 を終了してから再度立ち上げてください。

(蛇足) SSH しているときの行数を指定

ここまできたらこっちのもの、.stashrc ファイルに alias を登録したり (こちらを参照)、他の iOS 端末や SSH アプリ、パソコン等に .ssh フォルダの中の ids_rsa を持って行ってそれらの環境で SSH 接続ができるようにすれば作業がはかどります。 ids_rsa ファイルは秘密鍵ですので、絶対に他の人に見られないよう取り扱いには注意しましょう。

一点 Pythonista 3 の StaSh で SSH 接続している際の残念な点は、入力中は画面下の [Tab] [H] [Up] などの StaSh のもつ特殊キーの列と iOS のキーボードのソフトウェアキーボードが常に出てしまうところです (Bluetooth キーボードを使用していても 3行分ほど狭くなる)。面倒ですがログインする端末に応じて、stty コマンドで、画面の行数を指定しまいましょう。一画面に収まって作業がしやすくなります。以下を参考に、自分の環境でちょうどいい行数を指定してみてください。

$ stty rows 51 # iPad mini 2 で外付けキーボードならここまでイケる
$ stty rows 27 # iPhone 8 Plus でソフトウェアキーボードならここまでイケる

Pythonista3 に py-tree をインストールする

ディレクトリ構成を一覧表示してくれる py-tree を Pythonista3 (iOS) にインストールし、使いやすくする方法、など

py-tree をインストールすると

こういうのができるようになります:

[mysite]$ tree
.
|-- db.sqlite3
|-- manage.py
|-- mysite
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- polls
    |-- __init__.py
    |-- admin.py
    |-- apps.py
    |-- models.py
    |-- tests.py
    |-- urls.py
    |-- views.py
    `-- migrations
        |-- 0001_initial.py
        `-- __init__.py

Pythonista3 に限った話ではありませんが、Web アプリなど階層構造でプロジェクトを作っている時には、CLI (Pythonista3 の場合は StaSh) でディレクトリとファイルの一覧を見たくなるものです。そんな時に便利なのが py-tree コマンドです。上の例のように表示できるので、デバッグする時などにも重宝します。

インストール

インストールは簡単で、StaSh で以下のコマンド ([stash]$ プロンプトの後の部分) を実行します。

[stash]$ pip install py-tree

“tree” で実行できるようにする

実行するのはもちろん py-tree [enter] です。が、ソフトウェアキーボードでハイフンを入力するのは一手間かかって面倒なので、tree と入力すれば実行できるようにしましょう。
StaSh では Linux のシェル bash にある .bashrc のように alias を .stashrc ファイルに記載して利用することができます。具体的な手順は以下の通りです:

[stash]$ cd site-packages/stash/
[stash]$ la
.gitignore .stash_history .stash_tips .travis.yml CHANGES.md LICENSE README.md __init__.py bin docs getstash.py lib man stash.py system
[stash]$ touch .stashrc
[stash]$ echo "alias tree='py-tree'" >> .stashrc
[stash]$ cat .stashrc
alias tree='py-tree'
[stash]$ la
.gitignore .stash_history .stash_tips .stashrc .travis.yml CHANGES.md LICENSE README.md __init__.py bin docs getstash.py lib man stash.py system

StaSh を一度終了してから再度実行すると、一番上のサンプルのように tree コマンドで階層表示ができるようになります。

(蛇足) Pythonista 3 で xxx.py 以外のファイルを作成、編集する

Pythonista3 単体では .stashrc のような名前のファイルは作れません (勝手に .py が付加されてしまう)。また、一度作るとドットで始まるファイルは不可視となり、編集できません。そのため、そのようなファイルを作る場合は、上記手順にあるように StaSh の touch コマンドでファイルを作り、edit コマンドで Pythonista3 の編集画面で開いてあげます。不可視ファイルは ls -a または同コマンドのエイリアスとしてデフォルトで登録されている la で確認することができます。

まとめ

目的コマンドサンプル
不可視ファイルを作るtouchtouch .invisible
ファイルを Pythonista3 で編集editedit .invisible
不可視ファイルを含むファイルを表示ls -a
または
la
la
(la .* で、不可視ファイルのみを表示)

Pythonista3 に Django をインストール

iPhone や iPad 向け app Pythonista3 に Django をインストールする方法:

まず、ググって Pythonista3 に StaSh をインストールしてください。日本語の情報も見つかります。必要そうならそのうちここにも記事を書きます。

StaSh が入ったら、StaSh から以下を実行します:

$ pip install Django==1.11.6

バージョンの “1.11.6” は、その時に利用できる LTS (Long Term Support) version にしたら良いでしょう。djangoproject.com のサイトをご確認ください。(2021/06/12 追記) pip install django だけで バージョン 3.2.4 がインストールされました。バージョン指定は必要に応じてで良さそうです。

Pythonista3 を終了し、再度開きます。 <– これは Pythonista3 で何か変更を加えた際にほぼ必ず実行すべきアクションなので、期待した通りの動きをしていない時などはやってみてください。本手順でも何度も出てきます。

StaSh で Django のプロジェクトを作ります。

$ django-admin.py startproject mysite

Pythonista3 を終了し、再度開きます。

/mysite/manage.py を開きます。
Console (右ヘスワイプ) で以下を実行します。

import sys
sys.path

表示結果から、以下のような行を見つけ、コピーします (「…」の部分は、iOS 端末固有の情報です)。

/private/var/mobile/.../Documents/mysite

左にスワイプし、manage.py の編集画面に戻ります。
import sys” の下に以下を追加して、「ここに貼り付け」を上記でコピーした内容に置き換えます。(2021/06/12 追記) append の後に不要なイコール (=) が入っていたので削除しました。

sys.path.append(“ここに貼り付け”)

すると、こんな感じになります (端末によって AppGroup/…/Pythonista3 の間は異なります):

sys.path.append("/private/var/mobile/Containers/Shared/AppGroup/C1F57ABC-DDDD-EEEE-FFFF-B0B0E0B0B0E7/Pythonista3/Documents/mysite/")

Pythonista3 を終了し、再度開きます。

/mysite/manage.py を開き、実行 (右三角) ボタンを長押しして開いた画面の argument に、“runserver --noreload” を追加します。ハイフン 2つをうまく入力できない場合は、ダブルクォーテーションの内部をコピペしてください。

うまくいくと、以下のような内容が Console に表示されます。(改めて書きますが、何か想定外のエラーが発生した場合は Pythonista3 app を終了し、再度実行してください)

Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 12, 2021 - 14:29:53
Django version 3.2.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ここまできたら、http://127.0.0.1:8000/ を Safari などのウェブブラウザで開きます。

URL を長押しして Copy できる


“It Worked!” ページが表示されたら Django のインストールと初期設定は完了です。Django のチュートリアルなどを参考に、ご自身のプロジェクトやアプリケーションを作りましょう。

バージョン 3.2.4 だとこんな画面

Pythonista3 では Django への変更に対する自動更新ができない (--noreload) なので、期待通りの動作をしない場合は、Pythonista3 app の再起動をしてください。

以下は StaSh で Django をインストールした際のログです:

[~/Documents]$ pip list
[~/Documents]$ 
[~/Documents]$ 
[~/Documents]$ pip install django
Querying PyPI ... 
Error: Source distribution not available for Django: 2.0b1
[~/Documents]$ pip install Django==1.11.6
Querying PyPI ... 
Downloading package ...
Opening: https://pypi.python.org/packages/13/26/f3841e00663027ba7cf7ce7ba2cabb682a83cf0629bef013d70bebefa69d/Django-1.11.6.tar.gz
Save as: /private/var/mobile/Containers/Data/Application/20C8FA54-EEEE-FFFF-88888-3BACC5555555/tmp//Django-1.11.6.tar.gz (7874450 bytes)
   7874450  [100.00%]
Extracting archive file ...
Archive extracted.
Running setup file ...
Handling commandline script: django/bin/django-admin.py
Package installed: Django
Dependency available in Pythonista bundle : pytz
[~/Documents]$ 
[~/Documents]$ 
[~/Documents]$ which django
[~/Documents]$ pip list
Django (2.0b1) - A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
[~/Documents]$ 
© Peddals.com