Windows で cmd.exe 起動時に PATH を通す

Posted on Sun 19 January 2020 in misc • Tagged with python, windows, powershell, cmd

3月で Windows とはサヨナラするので、思い出につづっておこうと思います。

Python には、ディストリビューションが複数あります。公式の配布、 Anaconda 、 WinPython 。私が知っているだけでも、みっつあります。他は知りませんが公式の場合は、バージョンごとにインストール先のディレクトリが違います。

環境変数 PATH を設定した場合、複数ある python.exe を使い分けることができません。そこで、任意の Python に PATH を通しながら CLI を起動するショートカットを作りましょう。

ショートカットをつくる

コンテキストメニューなどでショートカットを作成します。設定するのはリンク先と作業フォルダです。

リンク先の設定 - PowerShell の場合

%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command …

Continue reading

来年こそは LT しようぜ!

Posted on Sat 14 December 2019 in misc • Tagged with python, jupyter, revealjs, presentation

このポストは Python駿河 勉強会 #8 〜Pythonの進化を振り返ってみよう!〜 の LT を元に作り直したものです。

「来年こそは LT しようぜ!」という題目で話をしました。良いツールを見つけたから、これから LT 頑張ろうという話です。全体的に雑な内容になっていますが、これから使おうという人の書いたものなので、その点、ご理解いただけたらと思います。

RISE - Jupyter Notebook で HTML スライドを作るツール

RISE https://rise.readthedocs.io

使い方

インストールの方法です。 RISE が Jupyter に依存しているので、 Jupyter を明示的にインストールする必要はありません。 Anaconda を使っている場合は、 conda でインストールしてください。

pip install RISE
jupyter-nbextension install rise --py …

Continue reading

Flask-Login でログイン機能を作ってみる

Posted on Mon 06 May 2019 in misc • Tagged with python, flask

Flask-Login を使ってログイン機能を作ってみました。 ログインするところだけです。ユーザー登録等は作っていません。

参考にしたページ が分かりやすかったです。 スクリプトファイルに直書きですが、ユーザーも作って認証させる処理は加えました。

#!/usr/bin/env python3
"""flask-login sampler."""

import flask
import flask_login


app = flask.Flask(__name__)
app.secret_key = b'boizagie'

login_manager = flask_login.LoginManager()
login_manager.init_app(app)


class User(flask_login.UserMixin):
    def __init__(self, user_id, username, password):
        self.user_id = user_id
        self.username = username
        self.password …

Continue reading

Responder に出会う

Posted on Wed 27 March 2019 in misc • Tagged with responder, python, alpine linux, linux, raspberry pi

前に HTTP で Raspberry Pi に付けた LED を点消灯する ということをやってみました。

このときは Bottle を使ったのですが、もうちょっと実用的な印象の Flask を使ってみようかと物色していたら出会ったのが、 Responder です。

2018年リリースの新しい Web Framework みたいです。WebSocket をサポートしているのが魅力的な感じです。こいつが使えるとサーバからクライアントにデータをプッシュできます。

ところでこの Responder が Python 3.6 以降でしか使えないようなので、Raspberry Pi で使おうとすると自分で Python 3.6 をインストールしないといけません。Debian Strech のパッケージは 3.5 みたいなので。

思い切って Alpine Linux を使うという手もあります。こっちのパッケージは Python …


Continue reading

Docstring is not comment

Posted on Wed 20 March 2019 in misc • Tagged with python, argparse, docstring

argparse は便利です。 簡単にコマンドラインオプションがつくれます。ヘルプもつくってくれます。

ただ、素敵なヘルプがつくれると、やっぱりしっかりとつくらないと、と思うわけです。docstring も書いて、argeparse 用にヘルプメッセージも書く。似たような内容になるので面倒は面倒です。両方をメンテナンスしなければなりません。

docstring はコメントではないというところに注目します。docstring は、コメントを決まったフォーマットで書いておいて、そこからドキュメントを生成しようというものではありません。docstring は __doc__ 属性に格納されます。

ですので、docstring は、プログラムの中で、呼び出して、加工して、利用することができます。これは docstring から argparse のヘルプメッセージをつくることも可能だということです。

docstring を書くのを面倒臭がる私には、とってもありがたいです。


Continue reading

HTTP で LED を点消灯

Posted on Mon 18 March 2019 in misc • Tagged with python, raspberry pi

Shonan.pyもくもく会で書いたプログラムです。 Raspberry Pi にサーバを立てて、Web API 越しに LED を点消灯させます。動作するものは作れました。

サーバのコードです。Raspberry Pi に置きます。LED は GPIO 17 につなぎます。

PUT メソッドで、{サーバのIPアドレス}/led?status=on などとリクエストすると動きます。on / off 以外がリクエストされると 400 を返します。

#!/usr/bin/python3

import bottle
from bottle import HTTPResponse
import gpiozero as gpio


@bottle.put('/led')
def update_led_status …

Continue reading

micro:bit をはじめて手にする

Posted on Sat 16 March 2019 in misc • Tagged with python, micropython, micro:bit

鎌倉Pythonもくもく会 #4 に参加しました。今日は買ったばかりの micro:bit を持っていきました。まずは開梱するところから始まりです。

ゲームの作り方を紹介したページ を見つけて、それをつくることに挑戦。ただし、このページで使っているのは、Python ではありません。

結果的には完成できず終了。でも、とても楽しくプログラミングができました。マトリクス状の LED があって、タクトスイッチも付いていて、センサーやもあります。そして、無線通信もできる。いろいろ遊べそうです。自分で回路をつくってハンダ付けするのも楽しいですが、得意ではないので、手軽に使えるボードも便利です。

あまり無理せず、LED とタクトスイッチでゲームをつくることに挑戦して行くつもりです。


Continue reading

Python の Argeparse を使ってみる

Posted on Fri 15 March 2019 in misc • Tagged with python, argparse

家ではLinux ですが、会社では Windows を使っています。きっかけはいろいろですが、ときどき Windows の CLI にいらつかされます。

できるだけ GUI を使うように心がけてはいるのですが、久しぶりに Todo.txt CLI を使ってみたくなり、Git についてくる Bash で動かしてみたら、これが遅い。とんでもなく遅い。バリバリとタスクを追加することを考えると、まったく使えないレベルです。

Python でそれっぽいものを書いて、コマンドプロンプトで使ったほうが良さそうです。そんなときに Argparse です。

いつもはクリックやドラッグ・アンド・ドロップで使えるようにだけしているので、それほど複雑ではありません。今度のように、Todo.txt CLI っぽいものをつくろうとするとサブコマンドが要ります。サブコマンドもそんなに難しくありません。これを sys.argv をいろいろといじって動かそうとすると、途方に暮れることでしょう。

Argparse は覚えておくと便利です …


Continue reading

pySerial をコマンドラインで使う

Posted on Mon 11 March 2019 in misc • Tagged with python, pyserial, uart

Keyboard

Raspberry Pi を操作するためにシリアル通信を使いたいと思います。たいした理由はありません。HDMI 接続のディスプレイをもっていないからです。

せっかく Python を使うので、 pySerial を使ってみたいと思います。

まず、 venv で仮想環境をつくって有効にしておきます。

その上で、 ドキュメントどおりに

pip install pyserial

これでインストールはされました。

とりあえずループバックで試したいので、USB シリアル変換アダプタを PC の USB ポートにつないで、TX と RX をつなぎます。

そうしておいて、 miniterm.py を起動します。

miniterm.py /dev/ttyUSB0 115200

するとエラーです。

could not open port '/dev/ttyUSB0': [Errno 13] could …

Continue reading

doctest に挑戦

Posted on Fri 08 March 2019 in misc • Tagged with python, test, doctest

doctest をやってみました。意外と難しい。REPL で改行コードを入れるのが、ちょっとよくわかりません。テキストファイルから読み込んだ文字列を引数とする関数のテストをしたかったのですが、改行が入った文字列をどうやったら良いのか。そのまま改行してしまうと SyntanError になりました。

>>> print('Raspberry\\nApple')
Raspberry\nApple

この投稿の reStructuredText を doctest でテストした結果です。 -v オプション付きで実行した出力です。

Trying:
    print('Raspberry\\nApple')
Expecting:
    Raspberry\nApple
ok
1 items passed all tests:
   1 tests in try-doctest.rst
1 tests in 1 items.
 1 passed and 0 …

Continue reading