SSブログ

TIOBE プログラミング言語ランキングで Python が1位に [Python]

毎月更新されている TIOBE のプログラミング言語ランキングの2021年10月のランキングで Python が一位になった
https://www.tiobe.com/tiobe-index/

Python が一位になったのは、たぶん初めて

C言語、Java と一位の座を争うかもしれないが、ライブラリの充実度や、 PSF による機能追加がうまくいっていることで、今後 Python が安定的に一位を維持しそう。
そして、今のところ Python を超える人気のプログラミング言語は出なそう。

いろんなところにあるアルゴリズムを説明したサンプルコードが、 Python や Python に似た言語になっていることも多くなったと思う。
まだまだ、Python でメシを食っていけることと、これからプログラミングを新たに学ぼうという人に、我田引水でなく Python を勧められるのがありがたい。
コメント(0) 

PyPI パッケージソムリエ [Python]

今日、仕事で、PyPI に登録されているパッケージについて
- 最後のリリースが古いからやめておいた方がいいですよ
- こっちのは、新しいし、今のところメンテナンスされている雰囲気
- 本当に大丈夫そうか確認のためには、ソースコードでどんなことをやっているか確認する必要はありそう
- XX社謹製のパッケージは継続的にメンテナンスされていきそう
- 結論として、XX社のパッケージは使って、「あったら便利(かも)パッケージ」はソースコードを読んで参考にするくらいが良さそう
と言うような話をしていた。

買ってくるソフトウェアの
- サポートされているか?
- いつまでサポートされるか?
- サポート価格
を調べて、問題あったらサポートに丸投げする、というやり方とは全然やり方が変わって来ていて、それが、下流から上流に広がってきてる感じがする今日この頃。
コメント(0) 

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 で、ボタンをポチポチして対戦できます。
スクリーンショット 2020-12-10 9.55.41.png

reversi.py を実行するとコンソール板も動かすことができます。
コメント(0) 

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 のようです。
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 は使いたいという環境の方(いるのか?)に、どこまでできるかチャンレンジしてもらいたいです。
コメント(0) 

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/

コメント(0) 

気がついたら 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でコンパイルして動くようになった。
コメント(0) 

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インストールされる
コメント(0) 

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 すごいな。
コメント(0) 

WSL1 のUbuntu 18.04 にインストールした Sphinx で Markdown から PDF を作る [Python]

Markdown から PDF を作りたい(かも)ということになった。
以前、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画像についてはいったん挫折
(ロゴ画像なんかは大丈夫でないかと)
コメント(0) 

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 に関数や演算子がない
- 日付時刻型の精度がちょっと低い
- 制約が効いていてカラムの変更をできない(←ここは、まだ改善の余地あるかも)
など、いろいろ問題あるんですが、できる部分では頑張りました。

コメント(0)