SSブログ

気がついたら 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) 
共通テーマ:日記・雑感

FDB driver 101 [Python]

これは、 Firebird advent calendar 2019 https://qiita.com/advent-calendar/2019/firebird の2日目の記事です

Firebird Conference 2019 で、発表された Firebird データーベースドライバー FDB のプレゼン資料は、ここに公開されているようです。
https://www.ibphoenix.com/files/conf2019/pythonfdb101.pdf
コメント(0) 
共通テーマ:日記・雑感

janomecabdic ができるまで [Python]

これは、昨日開催された (第104回)Python mini Hack-a-thon https://pyhack.connpass.com/event/147489/ で発表した janomecabdic の記録です。

janomecabdic という janome から MeCab 辞書を使って形態素解析をするアドオンパッケージを、昨日 PyPI にアップロードしました。

https://pypi.org/project/janomecabdic/
https://github.com/nakagami/janomecabdic

MeCab が辞書検索に Double Array というアルゴリズムを使っていることは以前から知っていましたが、先月くらいになって、 MeCab の Double Array で検索(と辞書の登録)する部分が、切り出されてテンプレートライブラリー化されていることを知りました。
http://chasen.org/~taku/software/darts/
「サンプルプログラムが動かねーなー」
と思っていたら、動かしている人を発見、
http://sucrose.hatenablog.com/entry/2012/09/28/121408
自分でも、短いサンプルを書いて、動作することを確認できました。
https://gist.github.com/nakagami/3ca60a82337ed66590d7e70a52efe352

janome では、同様の辞書検索を FST というアルゴリズムを使っていますが、
https://github.com/mocobeta/janome/blob/master/janome/dic.py
この↑へんの処理と同じことをする処理に差し替えれば、動きそうだぞ、ということもわかってきました。

・・・そうは言っても、 template ライブラリを読み解いて、コンパイル済みの辞書のバイナリフォーマットを理解して検索する処理を書かなくてはいけないのか?と思ったんですが、Cython でdarts のテンプレートライブラリを呼べることや、 C++ で、自分で定義した構造体、std::vector や std:pair を返す関数を書くと Cython がいい具合にマーシャリングしてPython に結果を返してくれることがわかりました。
Cython 凄い。

そんなわけで、最初に強いモチベーションがあったわけでなく、順番に調べていくうちに janomecabdic が完成しました。

コメント(0) 
共通テーマ:日記・雑感

Python Db2 database driver [Python]

2016年に、 DRDA プロトコルを喋って Apache Derby で使える python のデーターベースドライバーを書いた。
PyCon JP 2016 でトークしたときの状況↓
https://gist.github.com/nakagami/bfbe98d62377f3f4554121ab161ae8c9#apatch-derby

IBM の Db2 も、この DRDA プロトコルで RDBMS とデータのやり取りをするのでDb2 でも使えるようになるはずなんだけど、いろいろ足りないところがあるらしく挫折して放置していた。

改元に伴う10連休に、どこにも出かけず家にこもって試行錯誤したらDb2 で動くようになったので 、リリース(pypi にアップロード)した。

- https://pypi.org/project/pydrda/
- https://github.com/nakagami/pydrda

やったー。

まだ、完全ではないけれど IBM Clound のDb2 https://nakagami.blog.so-net.ne.jp/2019-04-13 に対してクエリーを実行できるようになって、一区切りついた。

平日の業務時間外と週末だけだと、前回までやりかけていたことを思い出すのに時間がかかってしまうので連休の間に進捗してよかった。

コメント(0) 
共通テーマ:日記・雑感

Django 2.2 with pure python database drivers [Python]

これは、(第98回)Python mini Hack-a-thon https://pyhack.connpass.com/event/126057/ への参加記録です。

Django のリポジトリの master を追いかけながら cymysql とminipg のデーターベースバックエンドをDjango の最新に、追随しようとしていた。

4/1 に予定通りDjango 2.2 がリリースされてすぐに cymysql (MySQL) のバックエンド django-cymysql はリリースできた。
しかし、 minipg (PostgreSQL) のバックエンド django-minipg は、テストが大々的にエラーになっていて、リリースできないでいた。

昨日の #pyhack では、午前中のうちに django-minipg がリリースできたので、午後は、 django-minipg と django-cymysql でロケットの発射を確認できるまでの手順をgist に書いていた。

https://gist.github.com/nakagami/2c261b306a50e9ecd84734c0e74e2011

サーバーホスト名、データーベース名、データーベースユーザー、パスワードは適宜読み替えてもらうと、ロケットが発射しているページが見れるはず。

PostgreSQL のデーターベースバックエンド django-minipg は、 Django が PostgreSQL 用にサポートしている一部の機能(配列とか postgis とか)が使えない。MySQL のデーターベースバックエンド django-cymysql は、 Django が MySQL向けにサポートしている一通りの機能が使えると思う。

普通は、Django にデフォルトで入っているデーターベースバックエンドを使えばいいけど、 mysqlclient や psycopg2 がなんかよくわからんけど、うまくインストールできていない、とかいう場合には試してみるといいかも。
コメント(0) 
共通テーマ:日記・雑感

Zope4(Plone5.2) のインストールと実行 [Python]

これは、(第96回)Python mini hack-a-thon の記録です。

Zope のFirebird Database adapter で Zope4 で動くやつあるの?
という Issue が来た
https://github.com/nakagami/Products.FirebirdDA/issues/2
ので Zope4 で何とかならないか調べてみた


Zope4 を(Python3で) 一番簡単にインストールする方法として、 Plone 5.2 の インストール方法のページを寺田さんに教えてもらった。

https://www.starzel.de/blog/four-options-to-try-plone-5-2-on-python-3

一番下、Update: のところの、 github のリポジトリをクローンしてbuildout する方法で動いた。
$ git clone git@github.com:plone/buildout.coredev.git coredev
$ cd coredev
$ git checkout 5.2
$ python3.7 -m venv .
$ ./bin/pip install -r requirements.txt
$ ./bin/buildout
$ ./bin/instance fg


で、Product.FirebirdDA を加えて buildout してみると・・・

diff --git a/buildout.cfg b/buildout.cfg
index 1d5298c77..9b03fa230 100644
--- a/buildout.cfg
+++ b/buildout.cfg
@@ -1,3 +1,6 @@
 [buildout]
 extends =
     core.cfg
+
+develop =
+     src/Products.FirebirdDA
diff --git a/core.cfg b/core.cfg
index 5392330ef..95e74b137 100644
--- a/core.cfg
+++ b/core.cfg
@@ -35,6 +35,7 @@ config-directory = ${buildout:directory}/etc
 # hook for custom eggs. In local.cfg this can be extended
 # with += to add custom eggs for whatever intend.
 custom-eggs =
+     Products.FirebirdDA

 # non-immersive development helpers commonly needed for Plone Core Development
 devtool-eggs =

ZSQLMethd とか、いろいろ関連する Products が動かないっぽいなー・・・
ということで、そう答えてクローズした。

・・・と思ったら、
ZMySQLDA は動くよー、と言われたので Reopen
https://github.com/nakagami/Products.FirebirdDA/issues/2#issuecomment-464300313

今日はここまで

コメント(0) 
共通テーマ:日記・雑感