pysmagic


Namepysmagic JSON
Version 2.5.0 PyPI version JSON
download
home_pageNone
SummaryThis Python package is a magic command that executes Python code in code cells on Jupyter and Google Colab using PyScript within an iframe.
upload_time2024-11-23 20:13:43
maintainerNone
docs_urlNone
authorUniras
requires_pythonNone
licenseMIT License
keywords pyscript jupyter magic
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PyScript Magic Command

## 概要

Jypyter(notebook/lab)・VSCodeまたはGoogle ColabでコードセルのPythonコードをPyScriptを使ってiframe(ブラウザ)上で実行するマジックコマンドです。

## 使い方

### マジックコマンドの追加

コードセルに以下のコードを貼り付けて実行しマジックコマンドを登録してください。カーネルやランタイムを再起動する度に再実行する必要があります。

```python
%pip install -q -U pysmagic
from pysmagic import register_pysmagic

register_pysmagic()
```

### マジックコマンドの使い方

コードセルの冒頭に以下のようにマジックコマンドを記述してください。実行するとアウトプットにiframeが表示されてその中でコードセルのコードがPyScriptで実行されます。

```python
%%runpys

from pyscript import display
display("Hello, world!")
```

以下はブラウザ用JavaScriptライブラリのp5.jsを使って円を描画し、キーボードの矢印キーで移動させるサンプルです。

```python
%%runpys 500 500 white mpy '{"x":100, "y":100}' '{}' '["https://cdn.jsdelivr.net/npm/p5@1/lib/p5.js"]'

import pyscript
import js


js.console.log(js.window)

def sketch(p5):
    x = js.pys.x
    y = js.pys.y

    def setup():
        p5.createCanvas(300, 300)

    def draw():
        nonlocal x, y
        p5.background(128)
        p5.fill(255, 0, 0)
        p5.ellipse(x, y, 50, 50)

        if p5.keyIsDown(p5.LEFT_ARROW):
            x -= 1
        if p5.keyIsDown(p5.RIGHT_ARROW):
            x += 1
        if p5.keyIsDown(p5.UP_ARROW):
            y -= 1
        if p5.keyIsDown(p5.DOWN_ARROW):
            y += 1

    p5.setup = setup
    p5.draw = draw

js.p5.new(sketch)
```

### グローバル変数

PyScriptから以下の変数にアクセスできます。

- 別のセルで設定したグローバル変数(_で始まる変数名やJSONに変換できないものは除く)
- マジックコマンドの引数py_valで設定した変数
- width: iframeの幅(マジックコマンドの引数で指定した幅)
- height: iframeの高さ(マジックコマンドの引数で指定した高さ)

この変数はjs.pysオブジェクトを介してアクセスできます。
変数名が衝突した場合は上記リストの順に上書きされて適用されます。

### マジックコマンド

#### %%runpys

コードセルのコードをPyScriptを使ってiframe内で実行します。

```jupyter
%%runpys [width] [height] [background] [py_type] [py_val] [py_conf] [js_src] [py_ver]
```

- width: iframeの幅を指定します。デフォルトは500です。
- height: iframeの高さを指定します。デフォルトは500です。
- background: iframeの背景色を指定します。デフォルトはwhiteです。
- py_type: 実行するPythonの種類。pyまたはmpyを指定します。pyは CPython互換のPyodide、mpyはMicroPytonで実行します。デフォルトはmpyです。
- py_val: PyScriptに渡すデータを''で囲んだJSON文字列形式で設定します。デフォルトは'{}'です
- py_conf: PyScriptの設定を''で囲んだJSON文字列形式で指定します。デフォルトは'{}'です。
- js_src: 外部JavaScriptのURLを''で囲んだ文字列のJSON配列形式で指定します。デフォルトは'[]'です。
- py_ver: PyScriptのバージョンを指定します、Noneを指定するとモジュール内部で設定したデフォルトのバージョンを使用します。デフォルトはNoneです。

#### %%genpys

セル内のPythonコードをPyScriptを用いてiframe内で実行するために生成したHTMLを表示するマジックコマンド

引数は%%runpysと同じです。

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pysmagic",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "PyScript, jupyter, magic",
    "author": "Uniras",
    "author_email": "tkappeng@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/88/34/2b8f7d1550203ed246aadca1896f7f125540f5be56aa3d086bc5e77fc016/pysmagic-2.5.0.tar.gz",
    "platform": null,
    "description": "# PyScript Magic Command\r\n\r\n## \u6982\u8981\r\n\r\nJypyter(notebook/lab)\u30fbVSCode\u307e\u305f\u306fGoogle Colab\u3067\u30b3\u30fc\u30c9\u30bb\u30eb\u306ePython\u30b3\u30fc\u30c9\u3092PyScript\u3092\u4f7f\u3063\u3066iframe(\u30d6\u30e9\u30a6\u30b6)\u4e0a\u3067\u5b9f\u884c\u3059\u308b\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002\r\n\r\n## \u4f7f\u3044\u65b9\r\n\r\n### \u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u306e\u8ffd\u52a0\r\n\r\n\u30b3\u30fc\u30c9\u30bb\u30eb\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8cbc\u308a\u4ed8\u3051\u3066\u5b9f\u884c\u3057\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u3092\u767b\u9332\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30ab\u30fc\u30cd\u30eb\u3084\u30e9\u30f3\u30bf\u30a4\u30e0\u3092\u518d\u8d77\u52d5\u3059\u308b\u5ea6\u306b\u518d\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\r\n\r\n```python\r\n%pip install -q -U pysmagic\r\nfrom pysmagic import register_pysmagic\r\n\r\nregister_pysmagic()\r\n```\r\n\r\n### \u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u306e\u4f7f\u3044\u65b9\r\n\r\n\u30b3\u30fc\u30c9\u30bb\u30eb\u306e\u5192\u982d\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u3092\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5b9f\u884c\u3059\u308b\u3068\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u306biframe\u304c\u8868\u793a\u3055\u308c\u3066\u305d\u306e\u4e2d\u3067\u30b3\u30fc\u30c9\u30bb\u30eb\u306e\u30b3\u30fc\u30c9\u304cPyScript\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\r\n\r\n```python\r\n%%runpys\r\n\r\nfrom pyscript import display\r\ndisplay(\"Hello, world!\")\r\n```\r\n\r\n\u4ee5\u4e0b\u306f\u30d6\u30e9\u30a6\u30b6\u7528JavaScript\u30e9\u30a4\u30d6\u30e9\u30ea\u306ep5.js\u3092\u4f7f\u3063\u3066\u5186\u3092\u63cf\u753b\u3057\u3001\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u77e2\u5370\u30ad\u30fc\u3067\u79fb\u52d5\u3055\u305b\u308b\u30b5\u30f3\u30d7\u30eb\u3067\u3059\u3002\r\n\r\n```python\r\n%%runpys 500 500 white mpy '{\"x\":100, \"y\":100}' '{}' '[\"https://cdn.jsdelivr.net/npm/p5@1/lib/p5.js\"]'\r\n\r\nimport pyscript\r\nimport js\r\n\r\n\r\njs.console.log(js.window)\r\n\r\ndef sketch(p5):\r\n    x = js.pys.x\r\n    y = js.pys.y\r\n\r\n    def setup():\r\n        p5.createCanvas(300, 300)\r\n\r\n    def draw():\r\n        nonlocal x, y\r\n        p5.background(128)\r\n        p5.fill(255, 0, 0)\r\n        p5.ellipse(x, y, 50, 50)\r\n\r\n        if p5.keyIsDown(p5.LEFT_ARROW):\r\n            x -= 1\r\n        if p5.keyIsDown(p5.RIGHT_ARROW):\r\n            x += 1\r\n        if p5.keyIsDown(p5.UP_ARROW):\r\n            y -= 1\r\n        if p5.keyIsDown(p5.DOWN_ARROW):\r\n            y += 1\r\n\r\n    p5.setup = setup\r\n    p5.draw = draw\r\n\r\njs.p5.new(sketch)\r\n```\r\n\r\n### \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\r\n\r\nPyScript\u304b\u3089\u4ee5\u4e0b\u306e\u5909\u6570\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\r\n\r\n- \u5225\u306e\u30bb\u30eb\u3067\u8a2d\u5b9a\u3057\u305f\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570(_\u3067\u59cb\u307e\u308b\u5909\u6570\u540d\u3084JSON\u306b\u5909\u63db\u3067\u304d\u306a\u3044\u3082\u306e\u306f\u9664\u304f)\r\n- \u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u306e\u5f15\u6570py_val\u3067\u8a2d\u5b9a\u3057\u305f\u5909\u6570\r\n- width: iframe\u306e\u5e45(\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u306e\u5f15\u6570\u3067\u6307\u5b9a\u3057\u305f\u5e45)\r\n- height: iframe\u306e\u9ad8\u3055(\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u306e\u5f15\u6570\u3067\u6307\u5b9a\u3057\u305f\u9ad8\u3055)\r\n\r\n\u3053\u306e\u5909\u6570\u306fjs.pys\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4ecb\u3057\u3066\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\r\n\u5909\u6570\u540d\u304c\u885d\u7a81\u3057\u305f\u5834\u5408\u306f\u4e0a\u8a18\u30ea\u30b9\u30c8\u306e\u9806\u306b\u4e0a\u66f8\u304d\u3055\u308c\u3066\u9069\u7528\u3055\u308c\u307e\u3059\u3002\r\n\r\n### \u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\r\n\r\n#### %%runpys\r\n\r\n\u30b3\u30fc\u30c9\u30bb\u30eb\u306e\u30b3\u30fc\u30c9\u3092PyScript\u3092\u4f7f\u3063\u3066iframe\u5185\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002\r\n\r\n```jupyter\r\n%%runpys [width] [height] [background] [py_type] [py_val] [py_conf] [js_src] [py_ver]\r\n```\r\n\r\n- width: iframe\u306e\u5e45\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f500\u3067\u3059\u3002\r\n- height: iframe\u306e\u9ad8\u3055\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f500\u3067\u3059\u3002\r\n- background: iframe\u306e\u80cc\u666f\u8272\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fwhite\u3067\u3059\u3002\r\n- py_type: \u5b9f\u884c\u3059\u308bPython\u306e\u7a2e\u985e\u3002py\u307e\u305f\u306fmpy\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002py\u306f CPython\u4e92\u63db\u306ePyodide\u3001mpy\u306fMicroPyton\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fmpy\u3067\u3059\u3002\r\n- py_val: PyScript\u306b\u6e21\u3059\u30c7\u30fc\u30bf\u3092''\u3067\u56f2\u3093\u3060JSON\u6587\u5b57\u5217\u5f62\u5f0f\u3067\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f'{}'\u3067\u3059\r\n- py_conf: PyScript\u306e\u8a2d\u5b9a\u3092''\u3067\u56f2\u3093\u3060JSON\u6587\u5b57\u5217\u5f62\u5f0f\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f'{}'\u3067\u3059\u3002\r\n- js_src: \u5916\u90e8JavaScript\u306eURL\u3092''\u3067\u56f2\u3093\u3060\u6587\u5b57\u5217\u306eJSON\u914d\u5217\u5f62\u5f0f\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f'[]'\u3067\u3059\u3002\r\n- py_ver: PyScript\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u307e\u3059\u3001None\u3092\u6307\u5b9a\u3059\u308b\u3068\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u90e8\u3067\u8a2d\u5b9a\u3057\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fNone\u3067\u3059\u3002\r\n\r\n#### %%genpys\r\n\r\n\u30bb\u30eb\u5185\u306ePython\u30b3\u30fc\u30c9\u3092PyScript\u3092\u7528\u3044\u3066iframe\u5185\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u751f\u6210\u3057\u305fHTML\u3092\u8868\u793a\u3059\u308b\u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\r\n\r\n\u5f15\u6570\u306f%%runpys\u3068\u540c\u3058\u3067\u3059\u3002\r\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "This Python package is a magic command that executes Python code in code cells on Jupyter and Google Colab using PyScript within an iframe.",
    "version": "2.5.0",
    "project_urls": {
        "Homepage": "https://github.com/uniras/PyScriptMagic",
        "Repository": "https://github.com/uniras/PyScriptMagic"
    },
    "split_keywords": [
        "pyscript",
        " jupyter",
        " magic"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8d0e165e6c797cdde06bfb1e9cd696b0198de482bc77c42a509afa88eba002a7",
                "md5": "8f6455eabccb020e1cd6e479f56ac21b",
                "sha256": "5380b5a70dca78889850b6ccd2c414844daf8846b267eeb82f93dd48cb0e06cd"
            },
            "downloads": -1,
            "filename": "pysmagic-2.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8f6455eabccb020e1cd6e479f56ac21b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 8807,
            "upload_time": "2024-11-23T20:13:41",
            "upload_time_iso_8601": "2024-11-23T20:13:41.885393Z",
            "url": "https://files.pythonhosted.org/packages/8d/0e/165e6c797cdde06bfb1e9cd696b0198de482bc77c42a509afa88eba002a7/pysmagic-2.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "88342b8f7d1550203ed246aadca1896f7f125540f5be56aa3d086bc5e77fc016",
                "md5": "0fbc1cd78c6a907c22418a881217c4bd",
                "sha256": "5de69985bd84cbc4ba013cef055accd0c6c1e5ed12edf8b68650cb1bbc055fb0"
            },
            "downloads": -1,
            "filename": "pysmagic-2.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0fbc1cd78c6a907c22418a881217c4bd",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 9050,
            "upload_time": "2024-11-23T20:13:43",
            "upload_time_iso_8601": "2024-11-23T20:13:43.265664Z",
            "url": "https://files.pythonhosted.org/packages/88/34/2b8f7d1550203ed246aadca1896f7f125540f5be56aa3d086bc5e77fc016/pysmagic-2.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-23 20:13:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "uniras",
    "github_project": "PyScriptMagic",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "pysmagic"
}
        
Elapsed time: 1.07224s