TIOBE プログラミング言語ランキングで Python が1位に [Python]
毎月更新されている TIOBE のプログラミング言語ランキングの2021年10月のランキングで Python が一位になった
https://www.tiobe.com/tiobe-index/
Python が一位になったのは、たぶん初めて
C言語、Java と一位の座を争うかもしれないが、ライブラリの充実度や、 PSF による機能追加がうまくいっていることで、今後 Python が安定的に一位を維持しそう。
そして、今のところ Python を超える人気のプログラミング言語は出なそう。
いろんなところにあるアルゴリズムを説明したサンプルコードが、 Python や Python に似た言語になっていることも多くなったと思う。
まだまだ、Python でメシを食っていけることと、これからプログラミングを新たに学ぼうという人に、我田引水でなく Python を勧められるのがありがたい。
https://www.tiobe.com/tiobe-index/
Python が一位になったのは、たぶん初めて
C言語、Java と一位の座を争うかもしれないが、ライブラリの充実度や、 PSF による機能追加がうまくいっていることで、今後 Python が安定的に一位を維持しそう。
そして、今のところ Python を超える人気のプログラミング言語は出なそう。
いろんなところにあるアルゴリズムを説明したサンプルコードが、 Python や Python に似た言語になっていることも多くなったと思う。
まだまだ、Python でメシを食っていけることと、これからプログラミングを新たに学ぼうという人に、我田引水でなく Python を勧められるのがありがたい。
PyPI パッケージソムリエ [Python]
今日、仕事で、PyPI に登録されているパッケージについて
- 最後のリリースが古いからやめておいた方がいいですよ
- こっちのは、新しいし、今のところメンテナンスされている雰囲気
- 本当に大丈夫そうか確認のためには、ソースコードでどんなことをやっているか確認する必要はありそう
- XX社謹製のパッケージは継続的にメンテナンスされていきそう
- 結論として、XX社のパッケージは使って、「あったら便利(かも)パッケージ」はソースコードを読んで参考にするくらいが良さそう
と言うような話をしていた。
買ってくるソフトウェアの
- サポートされているか?
- いつまでサポートされるか?
- サポート価格
を調べて、問題あったらサポートに丸投げする、というやり方とは全然やり方が変わって来ていて、それが、下流から上流に広がってきてる感じがする今日この頃。
- 最後のリリースが古いからやめておいた方がいいですよ
- こっちのは、新しいし、今のところメンテナンスされている雰囲気
- 本当に大丈夫そうか確認のためには、ソースコードでどんなことをやっているか確認する必要はありそう
- XX社謹製のパッケージは継続的にメンテナンスされていきそう
- 結論として、XX社のパッケージは使って、「あったら便利(かも)パッケージ」はソースコードを読んで参考にするくらいが良さそう
と言うような話をしていた。
買ってくるソフトウェアの
- サポートされているか?
- いつまでサポートされるか?
- サポート価格
を調べて、問題あったらサポートに丸投げする、というやり方とは全然やり方が変わって来ていて、それが、下流から上流に広がってきてる感じがする今日この頃。
python でリバーシ(オセロ)with tkinter [Python]
これは、
オセロ Advent Calendar 2020
https://qiita.com/advent-calendar/2020/othello
と
(おじさんですが)PyLadies Japan Advent Calendar 2020
https://adventar.org/calendars/5685
の 12日目の記事です
3年半ほど前に、コンソールに盤面を print するリバーシを書き、そのことを日記に書きました。 https://nakagami.blog.ss-blog.jp/2017-08-26
https://gist.github.com/nakagami/7a7d799bd4bd4ad8fcea96135c4af179
↑この gist の description にあるリンクを踏むと、python anywhere で動かしてみることができます。
・・・さて、ここまでで終わってしまうのでは、「過去記事の紹介かよ〜」ということになってしまうので、今日のエントリーのために tkinter の GUI をつけました。
上記 gist にある tkreversi.py というのが今回追加した GUI部分です。
対戦ロジックは reversi.py のものを使っています。
Gist のページの右上の「Download ZIP」のボタンを押下してダウンロードしたファイルを unzip して tkreversi.py を python3 で実行すると、 GUI で、ボタンをポチポチして対戦できます。

reversi.py を実行するとコンソール板も動かすことができます。
オセロ Advent Calendar 2020
https://qiita.com/advent-calendar/2020/othello
と
(おじさんですが)PyLadies Japan Advent Calendar 2020
https://adventar.org/calendars/5685
の 12日目の記事です
3年半ほど前に、コンソールに盤面を print するリバーシを書き、そのことを日記に書きました。 https://nakagami.blog.ss-blog.jp/2017-08-26
https://gist.github.com/nakagami/7a7d799bd4bd4ad8fcea96135c4af179
↑この gist の description にあるリンクを踏むと、python anywhere で動かしてみることができます。
・・・さて、ここまでで終わってしまうのでは、「過去記事の紹介かよ〜」ということになってしまうので、今日のエントリーのために tkinter の GUI をつけました。
上記 gist にある tkreversi.py というのが今回追加した GUI部分です。
対戦ロジックは reversi.py のものを使っています。
Gist のページの右上の「Download ZIP」のボタンを押下してダウンロードしたファイルを unzip して tkreversi.py を python3 で実行すると、 GUI で、ボタンをポチポチして対戦できます。

reversi.py を実行するとコンソール板も動かすことができます。
LibreOffice のPython を使う [Python]
これは、LibreOffice Advent Calendar 8日目の記事です。
https://adventar.org/calendars/5258
LibreOffice には、Python がビルトインされています。
例えば、Windows 環境でデフォルトインストールにすると以下の場所にあります。
"C:\Program Files\LibreOffice\program\python.exe"
LibreOffice 7.0 の Python のバージョンを確認すると 3.7.7 のようです。
この python には、 pip が入ってませんが、以下のようにすると pip がインストールできます。
この状態で、以下のようにすると janome が (pipにより)インストールできます。
"C:\Program Files\LibreOffice\program\python.exe" -mpip install janome
実行例↓
↓ Interactive shell から import してみたところ
残念ながら venv パッケージも入っておらず、 virtualenv をインストールしても、うまく仮想環境作れませんでしたが、 Windows では pip のインストールと、 pip を使ったパッケージのインストールは、管理者権限がなくてもできるようです。(ユーザー毎の環境にインストールされる)
公式のPython のインストーラーでインストールしたものと、LibreOffice にバンドルされている Python で、どこが違うのは把握できてませんが、(少なくとも、上記のように足りないパッケージはあるようですが)職場の Windows パソコンに Python はインストールされてないけれど LibreOffice は入っている、管理者権限はないけどPython は使いたいという環境の方(いるのか?)に、どこまでできるかチャンレンジしてもらいたいです。
https://adventar.org/calendars/5258
LibreOffice には、Python がビルトインされています。
例えば、Windows 環境でデフォルトインストールにすると以下の場所にあります。
"C:\Program Files\LibreOffice\program\python.exe"
LibreOffice 7.0 の Python のバージョンを確認すると 3.7.7 のようです。
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe" -V Python 3.7.7
この python には、 pip が入ってませんが、以下のようにすると pip がインストールできます。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py "C:\Program Files\LibreOffice\program\python.exe" get-pip.py
この状態で、以下のようにすると janome が (pipにより)インストールできます。
"C:\Program Files\LibreOffice\program\python.exe" -mpip install janome
実行例↓
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe" -mpip install janome Defaulting to user installation because normal site-packages is not writeable Collecting janome Downloading Janome-0.4.1-py2.py3-none-any.whl (19.7 MB) |████████████████████████████████| 19.7 MB 6.4 MB/s Installing collected packages: janome Successfully installed janome-0.4.1
↓ Interactive shell から import してみたところ
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe" Python 3.7.7 (default, Aug 27 2020, 20:55:02) [MSC v.1925 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import janome >>>
残念ながら venv パッケージも入っておらず、 virtualenv をインストールしても、うまく仮想環境作れませんでしたが、 Windows では pip のインストールと、 pip を使ったパッケージのインストールは、管理者権限がなくてもできるようです。(ユーザー毎の環境にインストールされる)
公式のPython のインストーラーでインストールしたものと、LibreOffice にバンドルされている Python で、どこが違うのは把握できてませんが、(少なくとも、上記のように足りないパッケージはあるようですが)職場の Windows パソコンに Python はインストールされてないけれど LibreOffice は入っている、管理者権限はないけどPython は使いたいという環境の方(いるのか?)に、どこまでできるかチャンレンジしてもらいたいです。
Azure CosmosDB で自家製の MongoDB データーベースドライバーを使ってみる [Python]
以前、MongoDB の簡単なデーターベースドライバーを Python で書いたが、長いこと放置してた。
先日、Azure CosmosDB に、無料でずっと使える枠があって、しかも MongoDBのドライバーが使えるということを聞いて、使えるか試してみることにした。
以下やったこと
https://docs.microsoft.com/ja-jp/azure/cosmos-db/create-mongodb-dotnet ここにあるように
Azure Cosmos DB のアカウントを作る
- アカウント名 → グローバルにユニークな名前
- API → 「MongoDB 用Azure Cosmos DB API」
- バージョン → 3.6
アカウント名が、(AWS S3 のバケット名みたいに)グローバルにユニークになるする必要があって(仕方ないんだけど)ちょっと難しかった。
アカウントを作成すると、自動でパスワードが作られる
作成したアカウント→クイックスタート→Othersにあるホスト、ポート、ユーザー名、プライマリーパスワードを使って接続しようとしたらエラーになった。
些末な問題だったので、ドライバーを直してリリースした https://pypi.org/project/nmongo/0.4.2
動かしてみると、 MapReduce や、db.collection.group() が使えないみたいだけど、基本的な動作はしていて、データエクスプローラーから値も見れる。エンジンは別物だと思うのに、変な感じ。
MongoDB の最新は 4.4 だが、 nmongo を書いた時に確認したのは 3.6 までで、 4.0 以降試してない。動くとは思うんだけど、試せてない。
本当は、新しい機能を使えるようにしたい。どんな新しい機能があるのかは知らんけど。
ここらへん↓を見るんだろうけど、実務で使う機会がないので、 MongoDB をインストールするのがおっくうだ。
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
先日、Azure CosmosDB に、無料でずっと使える枠があって、しかも MongoDBのドライバーが使えるということを聞いて、使えるか試してみることにした。
以下やったこと
https://docs.microsoft.com/ja-jp/azure/cosmos-db/create-mongodb-dotnet ここにあるように
Azure Cosmos DB のアカウントを作る
- アカウント名 → グローバルにユニークな名前
- API → 「MongoDB 用Azure Cosmos DB API」
- バージョン → 3.6
アカウント名が、(AWS S3 のバケット名みたいに)グローバルにユニークになるする必要があって(仕方ないんだけど)ちょっと難しかった。
アカウントを作成すると、自動でパスワードが作られる
作成したアカウント→クイックスタート→Othersにあるホスト、ポート、ユーザー名、プライマリーパスワードを使って接続しようとしたらエラーになった。
些末な問題だったので、ドライバーを直してリリースした https://pypi.org/project/nmongo/0.4.2
動かしてみると、 MapReduce や、db.collection.group() が使えないみたいだけど、基本的な動作はしていて、データエクスプローラーから値も見れる。エンジンは別物だと思うのに、変な感じ。
MongoDB の最新は 4.4 だが、 nmongo を書いた時に確認したのは 3.6 までで、 4.0 以降試してない。動くとは思うんだけど、試せてない。
本当は、新しい機能を使えるようにしたい。どんな新しい機能があるのかは知らんけど。
ここらへん↓を見るんだろうけど、実務で使う機会がないので、 MongoDB をインストールするのがおっくうだ。
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
気がついたら PyO3 が stable な Rustでコンパイルできるようになっていた [Python]
Rust のコードを Python から呼び出せるようにする PyO3、この時 https://nakagami.blog.ss-blog.jp/2020-03-21 は、(というか、長いこと) nightly の Rustでしかコンパイルできなかったのに、数日前に久しぶりに見に行ったら、 stable で動くようになっていた!
PyO3 は、長いこと nightly じゃないとコンパイルできなかったので、このまま stableで使えることないのかなぁ、、、なんて思っていた。
・・・というわけで、依存する PyO3 のバージョンを上げたら、 stable な Rustでコンパイルして動くようになった。
PyO3 は、長いこと nightly じゃないとコンパイルできなかったので、このまま stableで使えることないのかなぁ、、、なんて思っていた。
・・・というわけで、依存する PyO3 のバージョンを上げたら、 stable な Rustでコンパイルして動くようになった。
Ubuntu20.04 に Python3.5〜Python3.7 をインストール [Python]
Ubuntu20.04 には Python3.8 がデフォルトで入っている
deadsnakes team https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
がメンテナンスしくれているリポジトリのパッケージから
Python3.5〜Python3.7 をインストールした
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt install python3.5 python3.5-venv python3.5-dev
sudo apt install python3.6 python3.6-venv python3.6-dev
sudo apt install python3.7 python3.7-venv python3.7-dev
で Python3.5〜Python3.7 が入れられた
Python3.9 も、リリースされたら deadsnakes さんたちがパッケージを用意してくれそう
ちなみに Python2.7 は、 ppa:deadsnakes/ppa を追加しなくても
sudp apt install python2.7 pyton2.7-dev
で(今のところは)インストールできている
curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
sudo python2 get-pip.py
で python2.7 の pip (pip2)がiインストールされる
deadsnakes team https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
がメンテナンスしくれているリポジトリのパッケージから
Python3.5〜Python3.7 をインストールした
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt install python3.5 python3.5-venv python3.5-dev
sudo apt install python3.6 python3.6-venv python3.6-dev
sudo apt install python3.7 python3.7-venv python3.7-dev
で Python3.5〜Python3.7 が入れられた
Python3.9 も、リリースされたら deadsnakes さんたちがパッケージを用意してくれそう
ちなみに Python2.7 は、 ppa:deadsnakes/ppa を追加しなくても
sudp apt install python2.7 pyton2.7-dev
で(今のところは)インストールできている
curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
sudo python2 get-pip.py
で python2.7 の pip (pip2)がiインストールされる
Zope Database Adapter の Zope4 対応 [Python]
最近、 Produsts.ZSQLiteDA が動かないんだけど Update しないの?というメールが来た(超訳)
Produsts.ZSQLiteDA は sqlite の Zope Database Adapter だが、そういえば、Firebird の Database Adapter を、何か Update した記憶があるが、 sqlite の Database Adapter は放置してるな・・・
Zope ってどうやってインストールしたんだっけかな?と思って、自分の日記を探したらこれだ
https://nakagami.blog.ss-blog.jp/2019-02-16
確認してみると、この時、 Firebird の Database Adapter の Zope4 対応をしようと思って Zope (Plone)をインストールしてみたが、 Products.FirebirdDA については何もしてなかったみたい。
ダメじゃん。
というわけで(というほど簡単な話ではなかったが) この2つの Database Adapter の Zope4 対応、Python3 対応をした。
- https://pypi.org/project/Products.ZSQLiteDA/
- https://pypi.org/project/Products.FirebirdDA/
Browse タブで、データーベースのテーブル定義が見られる機能があったのだが、動かなくなっていて、これを動くようにするのは大変そうだったし、Firebird はデーターベースサーバーの機能が増えて、これじゃ足りないという状態だったので、 Browse タブは、ばっさり削除した。
Products.ZSQLiteDA は、7年振り、Products.FirebirdDA は6年半振りくらいのリリースになった。
もう、自分が Zope の使い方自体わからなくなってしまったので、Test タブで、試しに SQL文を実行してみるくらいのところまでしかしてないけど、ちゃんと動いてるかな?
うまく動かなかったら、使いたい人が Pull Request を送ってくれると嬉しいなぁ。
それにしても、Zope の Database Adapter なんて、誰も使わないだろう、と思って放置していたが、問い合わせがくる Zope すごいな。
Produsts.ZSQLiteDA は sqlite の Zope Database Adapter だが、そういえば、Firebird の Database Adapter を、何か Update した記憶があるが、 sqlite の Database Adapter は放置してるな・・・
Zope ってどうやってインストールしたんだっけかな?と思って、自分の日記を探したらこれだ
https://nakagami.blog.ss-blog.jp/2019-02-16
確認してみると、この時、 Firebird の Database Adapter の Zope4 対応をしようと思って Zope (Plone)をインストールしてみたが、 Products.FirebirdDA については何もしてなかったみたい。
ダメじゃん。
というわけで(というほど簡単な話ではなかったが) この2つの Database Adapter の Zope4 対応、Python3 対応をした。
- https://pypi.org/project/Products.ZSQLiteDA/
- https://pypi.org/project/Products.FirebirdDA/
Browse タブで、データーベースのテーブル定義が見られる機能があったのだが、動かなくなっていて、これを動くようにするのは大変そうだったし、Firebird はデーターベースサーバーの機能が増えて、これじゃ足りないという状態だったので、 Browse タブは、ばっさり削除した。
Products.ZSQLiteDA は、7年振り、Products.FirebirdDA は6年半振りくらいのリリースになった。
もう、自分が Zope の使い方自体わからなくなってしまったので、Test タブで、試しに SQL文を実行してみるくらいのところまでしかしてないけど、ちゃんと動いてるかな?
うまく動かなかったら、使いたい人が Pull Request を送ってくれると嬉しいなぁ。
それにしても、Zope の Database Adapter なんて、誰も使わないだろう、と思って放置していたが、問い合わせがくる Zope すごいな。
WSL1 のUbuntu 18.04 にインストールした Sphinx で Markdown から PDF を作る [Python]
Markdown から PDF を作りたい(かも)ということになった。
以前、Sphinx で(Restructured Text で)ドキュメントを書いて PDF 出力した。
PDF 出力のために何かインストールしたんだけど、何したんだっけ?と思って自分のブログ(ここ)を探したが発見できなかった。
昔は、何かをインストールした手順みたいなのも結構書いてたんだけどなぁ。
よろしくない。
Windows 10 のいわゆる WSL1 の Ubuntu 18.04 で、ほぼ何もインストールされてないところからの手順を試したので、ここに書いておく。
でインストール
ここらへん https://sphinx-users.jp/gettingstarted/make_project.html を見ながら
でプロジェクト作って
http://www.usaturn.net/pyconjp/use_markdown.html に従って conf.py に以下を追加
あとは、 index.rst の toctree に foo.md とか入れて
を実行するとPDF ができた。(拡張子 .md は省略可)
(追記 2019-12-22)svg 画像を埋め込む場合
https://blog.interstellar.co.jp/2019/03/sphinx-svg-pdf-converter/
conf.py に以下を追加
これで svg 入りの Markdown がpdf に変わる・・・のだが、
画像に日本語の文字がある場合なんかにフォントの関係か[Not supported by viewer]
と出る場合があってsvg画像についてはいったん挫折
(ロゴ画像なんかは大丈夫でないかと)
以前、Sphinx で(Restructured Text で)ドキュメントを書いて PDF 出力した。
PDF 出力のために何かインストールしたんだけど、何したんだっけ?と思って自分のブログ(ここ)を探したが発見できなかった。
昔は、何かをインストールした手順みたいなのも結構書いてたんだけどなぁ。
よろしくない。
Windows 10 のいわゆる WSL1 の Ubuntu 18.04 で、ほぼ何もインストールされてないところからの手順を試したので、ここに書いておく。
sudo apt install -y python3-pip pip3 install Sphinx recommonmark sudo apt install -y texlive-latex-recommended \ texlive-latex-extra \ texlive-fonts-recommended \ texlive-fonts-extra \ texlive-lang-japanese \ texlive-lang-cjk sudo apt install -y latexmk
でインストール
ここらへん https://sphinx-users.jp/gettingstarted/make_project.html を見ながら
sphinx-quickstart -q -p "Sample PDF" -a nakagami -v 1.0 -l ja sample_project
でプロジェクト作って
http://www.usaturn.net/pyconjp/use_markdown.html に従って conf.py に以下を追加
from recommonmark.parser import CommonMarkParser source_parsers = { '.md': CommonMarkParser, } source_suffix = ['.rst', '.md']
あとは、 index.rst の toctree に foo.md とか入れて
make latexpdf
を実行するとPDF ができた。(拡張子 .md は省略可)
(追記 2019-12-22)svg 画像を埋め込む場合
https://blog.interstellar.co.jp/2019/03/sphinx-svg-pdf-converter/
sudo apt install inkscape pip3 install sphinxcontrib-svg2pdfconverter
conf.py に以下を追加
extensions = [ ‘sphinxcontrib.inkscapeconverter’] inkscape_converter_bin = ‘/usr/bin/inkscape’
これで svg 入りの Markdown がpdf に変わる・・・のだが、
画像に日本語の文字がある場合なんかにフォントの関係か[Not supported by viewer]
と出る場合があってsvg画像についてはいったん挫折
(ロゴ画像なんかは大丈夫でないかと)
Django の Firebird バックエンド djfirebid 0.2.0 リリース [Python]
この記事は Firebird Advent Calendar 2019 https://qiita.com/advent-calendar/2019/firebird の8日目の記事です
Django のFirebird backend を書いていることは、昨年の Firebird Advent Calendar で紹介しましたが
https://nakagami.blog.ss-blog.jp/2018-12-20 Firebird 4.0 が出ないまま Django の開発の trunk がDjango 3.0 に移ってしまったので、結局 Django 2.2 向けのリリースはしてません。
Firebird 4.0 を待っていると、Django の、どのバージョンをターゲットにしていいかわからないので、 Django 3.0 もリリースされたことだし、 Django 3.0 + Firebird 4.0 beta1 対応版として、バージョン 0.2.0 をリリースしました(さっき)
https://pypi.org/project/djfirebirdsql/0.2.0/
Firebird の制約で
- 識別子を Rename する機能がない
- 一時的に制約を OFF にする機能がない
- Firebird に関数や演算子がない
- 日付時刻型の精度がちょっと低い
- 制約が効いていてカラムの変更をできない(←ここは、まだ改善の余地あるかも)
など、いろいろ問題あるんですが、できる部分では頑張りました。
Django のFirebird backend を書いていることは、昨年の Firebird Advent Calendar で紹介しましたが
https://nakagami.blog.ss-blog.jp/2018-12-20 Firebird 4.0 が出ないまま Django の開発の trunk がDjango 3.0 に移ってしまったので、結局 Django 2.2 向けのリリースはしてません。
Firebird 4.0 を待っていると、Django の、どのバージョンをターゲットにしていいかわからないので、 Django 3.0 もリリースされたことだし、 Django 3.0 + Firebird 4.0 beta1 対応版として、バージョン 0.2.0 をリリースしました(さっき)
https://pypi.org/project/djfirebirdsql/0.2.0/
Firebird の制約で
- 識別子を Rename する機能がない
- 一時的に制約を OFF にする機能がない
- Firebird に関数や演算子がない
- 日付時刻型の精度がちょっと低い
- 制約が効いていてカラムの変更をできない(←ここは、まだ改善の余地あるかも)
など、いろいろ問題あるんですが、できる部分では頑張りました。