.
[ 01. pythonista3 の現状について ]
2023/05 に pythonista3 v3.4 がリリースされて以降、
現在、暗雲が立ち込めている感じです
この pythonista3 v3.4 は、
python 3.10 のサポートがされているのですが、
バグが多く、フォーラムでは、
報告や改善要望などがあがっておりました
わたくしもいくつか報告をさせていただいていたのですが、
2024/06 にフォーラムにアクセスしたところ、
アクセス不可の状態になっております
Pythonista Forum
https://forum.omz-software.com/
心配するユーザーの方々も動向を見守ってます
Is Pythonista (Python for iOS/iPadOS) no longer with active development and support?
https://www.reddit.com/r/Python/comments/1ca9x6h/is_pythonista_python_for_iosipados_no_longer_with/?rdt=41501
issue ページは存在し、
omz/Pythonista-Issues
https://github.com/omz/Pythonista-Issues/
アプリの配信もまだ止まってはいないのですが、
今後の継続を祈るばかりです
という状況ではありますが、stash ネタに入ります
[ 02. キッチン ]
・iphone 6s plus / ios 15.8
・pythonista3 v3.4 (python 3.10.4)
・stash v0.7.5
[ 03. stash 起動エラー暫定回避 ]
先日、旧デバイスに 新規に pythonista3 および、
stash (get_stash.py) をセットアップ後、
stash (launch_stash.py) 実行で起動エラーとなりました
ネット上にも類似エラー事例が載っておりました
2023-05-04
pythonsita3.4でStashが起動できなくなった人へ
https://yoichi-41.hatenablog.com/entry/20230504Pythonista34
-> 実行エラーが表示され、plistlib に問題があり、
/stash/lib/ のライブラリを修正するケース
ただ、今回の環境で起きた現象としては、
stash (launch_stash.py) 実行で
pythonista3 のアプリ自体が強制終了となりました
(環境依存かもしれません)
launch_stash.py のデバッグが必要かなと思ったのですが、
以下の方法で暫定回避をおこないました
2023-05-08
Pythonista crash during start launch_stash.py #496
https://github.com/ywangd/stash/issues/496
簡単にお伝えしますと、
launch_stash.py の一部書き換えだけで OK です
(01) import ui の追加
(02) _stash.launch(ns.command) をコメントし、
@ui.in_background
def launch(*args):
_stash.launch(*args)
launch(ns.command)
に置き換え
# coding: utf-8
"""
Launch StaSh in a more flexible and reliable way.
"""
import sys
import argparse
import ui
module_names = (
'stash',
'system.shcommon',
'system.shstreams',
'system.shscreens',
'system.shui',
'system.shui.base',
'system.shio',
'system.shiowrapper',
'system.shparsers',
'system.shruntime',
'system.shthreads',
'system.shuseractionproxy',
'system.shhistory',
)
# Attempt to reload modules when startup, does not seem to work
if 'stash.stash' in sys.modules:
for name in module_names:
sys.modules.pop('stash.' + name)
from stash import stash
ap = argparse.ArgumentParser()
ap.add_argument('--no-cfgfile', action='store_true', help='do not load external config files')
ap.add_argument('--no-rcfile', action='store_true', help='do not load external resource file')
ap.add_argument('--no-historyfile', action='store_true', help='do not load history file from last session')
ap.add_argument(
'--log-level',
choices=['DEBUG',
'INFO',
'WARN',
'ERROR',
'CRITICAL'],
default='INFO',
help='the logging level'
)
ap.add_argument('--log-file', help='the file to send logging messages')
ap.add_argument('--debug-switch', default='', help='a comma separate list to turn on debug switch for components')
ap.add_argument('-c', '--command', default=None, dest='command', help='command to run')
ap.add_argument('args', # the editor shortcuts may pass additional arguments
nargs='*',
help='additional arguments (ignored)')
ns = ap.parse_args()
log_setting = {
'level': ns.log_level,
'file': ns.log_file,
}
if ns.debug_switch == '':
debug = (
# stash._DEBUG_STREAM,
# stash._DEBUG_RENDERER,
# stash._DEBUG_MAIN_SCREEN,
# stash._DEBUG_MINI_BUFFER,
# stash._DEBUG_IO,
# stash._DEBUG_UI,
# stash._DEBUG_TERMINAL,
# stash._DEBUG_TV_DELEGATE,
# stash._DEBUG_RUNTIME,
# stash._DEBUG_PARSER,
# stash._DEBUG_EXPANDER,
# stash._DEBUG_COMPLETER,
)
elif ns.debug_switch == "all":
debug = []
for key in dir(stash):
if key.startswith("_DEBUG_"):
value = getattr(stash, key, None)
if value is not None:
debug.append(value)
else:
debug = []
for ds in ns.debug_switch.split(','):
ds = getattr(stash, '_DEBUG_{}'.format(ds.upper()), None)
if ds is not None:
debug.append(ds)
if ns.command:
# tell StaSh not to run any command if command is passed
# (we will call the command manually later)
ctp = False
else:
# tell StaSh to run the default command (totd.py)
ctp = None
_stash = stash.StaSh(
debug=debug,
log_setting=log_setting,
no_cfgfile=ns.no_cfgfile,
no_rcfile=ns.no_rcfile,
no_historyfile=ns.no_historyfile,
command=ctp,
)
# _stash.launch(ns.command)
@ui.in_background
def launch(*args):
_stash.launch(*args)
launch(ns.command)
if ns.command is not None:
# TODO: _stash.launch() may block, which prevents this from being executed
_stash(ns.command, add_to_history=False, persistent_level=0)
これで pythonista3 のアプリ自体が強制終了とならずに、
stash のコンソールが起動された状態になりました
この方法は pip コマンドを使えるようにするための
ひとまずの暫定回避方法になります
ただ、今回のエラー以前に、
pythonista3 上で stash を使用すると、
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Warning: you are running StaSh in python3.
Some commands may not work
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
との記載があるように、
pip も オプションが利用できなかったり、
対応ライブラリが少ないなど、完全な pip 互換として
利用できるわけではありませんのでご注意ください
試しておりませんが、こういうものもあるそうです
Pythonista3でstashのpipじゃない本物のpipを使いたい人向け
https://github.com/CrossDarkrix/Pythonista3_pip_Configration_Tool
ちなみに、stash 実行時、pip 実行時など、
以下の結果コードが赤字で
ちょこちょこ出力される場合がありますが、
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
stash: ^C
KeyboardInterrupt: Exit: (終了コード)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
pip コマンド実行には影響がないため、
暫定回避という意味では無視しても大丈夫です
[ 04. デザート ]
pythonista は pip (stash) の一部制限はあるものの、
iOS の python 統合環境としては秀逸で、
open in から Run Pythonista Script として
お手軽にアクセスできたりと、iOS との親和性が高いのですが、
今後は、pyto IDE など、代替え環境も
模索していく必要があるかもしれませんね
.