2019年12月17日

Kivy アプリの Windows 用実行ファイルを作成するまで (ライセンス編)

nuitka で kivy 製アプリの実行ファイルを作製した際, *.dist ディレクトリに自動的に生成される dll, 及び, Python*\share\glew\bin\, Python*\share\sdl2\bin\ 両ディレクトリに存在する dll のライセンスについてのメモです. 正確でない可能性は大いにあります. 正直, わからないことが多いので, 間違い等を指摘していただけるとありがたいです.

  • comctl32.dll
    役割: Windows のコモンコントロールを呼び出すための dll ?
    ライセンス: 不明. Visual C++ 6.0 再頒布可能パッケージに含まれているので, 同梱しても問題ない?
    参考:
    https://www.ipentec.com/document/visual-studio-c-plus-plus-redistribution-files
    http://chokuto.ifdef.jp/urawaza/comctl.html

  • libcrypto-1_1.dll, libssl-1_1.dll
    役割: OpenSSL "インターネットでの暗号化通信に使われるオープンソースのプログラムやソフトウェアのこと。"
    ライセンス: OpenSSL License
    引用: https://www.kddi.com/yogo/セキュリティ/OpenSSL.html
    参考: https://ja.wikipedia.org/wiki/OpenSSL
    https://www.atmarkit.co.jp/ait/articles/0906/26/news129_2.html

  • python37.dll
    役割: Python 3.7 を利用するための dll ?
    ライセンス: Python Software Foundation License
    参考:
    https://ja.wikipedia.org/wiki/Python_Software_Foundation_License
    https://docs.python.org/ja/3/faq/general.html

  • pywintypes37.dll
    ライセンス: python37.dll と同じ?

  • sqlite3.dll
    役割: "SQLite(エスキューライト、エスキューエライト)は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) である。"
    ライセンス: public domain
    引用: https://ja.wikipedia.org/wiki/SQLite

  • tcl86t.dll, tk86t.dll
    役割: おそらく, tcl/tk を使用するための dll
    ライセンス: BSDライセンス ?

  • vcruntime140.dll
    役割: C で作製された exe を起動するのに必要な dll ?
    ライセンス: 不明. Visual Studio 2015 の Visual C++ 再頒布可能パッケージに含まれているので, 同梱しても問題ない?
    参考: https://www.ipentec.com/document/visual-studio-c-plus-plus-redistribution-files

  • glew32.dll
    役割: OpenGL Extension Wrangler Library
    ライセンス: Modified BSD License, MIT License

  • SDL2.dll, SDL2_image.dll, SDL2_mixer.dll, SDL2_ttf.dll
    ライセンス: zlib License

  • libFLAC-8.dll
    役割: "FLAC(フラック、Free Lossless Audio Codec)は、オープンフォーマットの可逆圧縮音声ファイルフォーマットである。"
    ライセンス: 修正BSDライセンス・三条項BSDライセンス
    引用: https://ja.wikipedia.org/wiki/FLAC

  • libfreetype-6.dll
    役割: "FreeType(フリータイプ)は、フォントエンジンを実装したライブラリである。"
    ライセンス: The FreeType Project LICENSE
    引用: https://ja.wikipedia.org/wiki/FreeType
    参考: http://giraffydev.hatenablog.com/entry/2016/09/27/101841

  • libjpeg-9.dll
    役割: "libjpegは、JPEGのエンコード、デコードを行うためのライブラリである。JPEGファイルを操作するためのユーティリティも含んでいる。"
    ライセンス: フリー、ロイヤリティ無しで商用利用可、表示が必要。"this software is based in part on the work of the Independent JPEG Group" と表記すればよい?
    引用: https://ja.wikipedia.org/wiki/Libjpeg
    参考: https://qa.itmedia.co.jp/qa5192199.html

  • libmodplug-1.dll
    役割: "ModPlug Tracker(モッドプラグトラッカー)は、Windows上で Olivier Lapicque によって開発されたオーディオモジュールトラッカーである。"
    ライセンス: public domain

  • libmpg123-0.dll
    役割: mpg123 "mpg123 is a free and open-source audio player. It supports MPEG audio formats, including MP3."
    ライセンス: LGPL 2.1
    引用: https://en.wikipedia.org/wiki/Mpg123

  • libogg-0.dll
    ライセンス: 修正BSDライセンス・三条項BSDライセンス

  • libopus-0.dll
    ライセンス: 修正BSDライセンス・三条項BSDライセンス

  • libopusfile-0.dll
    ライセンス: 修正BSDライセンス・三条項BSDライセンス

  • libtiff-5.dll
    ライセンス: libtiff Software License

  • libwebp-7.dll
    ライセンス: 修正BSDライセンス・三条項BSDライセンス

  • libvorbis-0.dll
    ライセンス: 修正BSDライセンス・三条項BSDライセンス

  • libvorbisfile-3.dll
    ライセンス: 不明. libvorbis-0.dll と同じだろうか

  • zlib1.dll
    ライセンス: zlib License

気をつける必要がある dll は, LGPL 2.1 ライセンスの libmpg123-0.dll 位でしょうか. このファイルは (おそらく, 動画を扱わなければ) 無くても動くので, nuitka で生成したファイル群を, ソースファイルを公開せずに頒布しても問題なさそうに思えます.

ラベル:Python kivy nuitka Windows
posted by Takenoko at 11:16| Comment(0) | programming | このブログの読者になる | 更新情報をチェックする

2019年11月19日

Kivy アプリの Windows 用実行ファイルを作成するまで (作製編)

1. PyInstaller を使用する場合

main.py

main.kv

上記の main.py, main.kv を例に説明します. 適当なディレクトリにこれらのファイルを作製します.

コマンドプロンプトを管理者として開き, main.py ファイルのあるディレクトリに移動し,

python -m PyInstaller --noconsole main.py

を入力します.

main.py のあるディレクトリに生成された main.spec を開き,

# -*- mode: python ; coding: utf-8 -*-

の次の行に,

from kivy_deps import sdl2, glew

を追加し, ('.' ではなく, '_' なので注意*1)

a.datas,

の次の行に,

*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],

を追加します. インデントは揃えます.

datas=[],

datas=[('main.kv', '.')],

にします. kv ファイルを使わない場合は, 必要ないはずです.

python -m PyInstaller main.spec

と入力し,

WARNING: The output directory "(main.py のあるディレクトリ)\dist\main" and ALL ITS CONTENTS wil l be REMOVED! Continue? (y/N)

と出たら y を入力します.

dist/main

に main.exe が作製されているので, 実行して画面が表示されたら成功です.

2. Nuitka を使用する場合

main.py

上記の main.py (main.kv は PyInstaller の項と同じもの) を例に説明します. 適当なディレクトリにこれらのファイルを作製します.

コマンドプロンプトを管理者として開き, main.py ファイルのあるディレクトリに移動し,

python -m nuitka --standalone --windows-disable-console --mingw64 --jobs=1 main.py

と入力します. jobs は, CPU コア数 * 2 にするといいのかもしれません. この作業は時間がかかります. 終了後, main.dist/ に main.exe が作製されます.

Python37-32\Lib\site-packages\kivy\

から data フォルダを main.dist/kivy にコピーし,

Python37-32\share\glew\bin\

から glew32.dll を,

Python37-32\share\sdl2\bin\

から全てのファイルを main.dist にコピーします. *2 最後に, main.kv を main.dist にコピーします.

main.exe を実行して画面が表示されたら成功です.

3. サンプル

以前, Python で迷路生成 で書いた kivy のコードを PyInstaller, Nuitka の両方で exe 化してみました.

PyInstaller

Nuitka

自分の環境では動作する, しないといった報告をしていただけると喜びます. 少なくとも, Linux Mint 18.3 の Wine では動きませんでした.

*1

Create a package for Windows(翻訳済み) − Kivy 1.10.0 ドキュメント:

では kivy.deps になっている. 以前はそうだったのかもしれない.

*2

作製環境でこのサンプルを動かした場合,

  • libmpg123-0.dll
  • libcrypto-1_1.dll
  • libssl-1_1.dll
  • libvorbis-0.dll
  • libvorbisfile-3.dll
  • libwebp-7.dll
  • libtiff-5.dll
  • libopus-0.dll
  • libopusfile-0.dll
  • libmodplug-1.dll
  • libFLAC-8.dll
  • libogg-0.dll
  • tcl86t.dll
  • tk86t.dll
  • sqlite3.dll
は無くても動きました.

参考ページ

Create a package for Windows(翻訳済み) − Kivy 1.10.0 ドキュメント:
KivyのGUIアプリをNuitkaで簡単に小サイズ・高速に動く実行ファイル(exe)にする(Windows10)
Packaging Kivy apps written in Python 3, targeting Windows using Nuitka

19/12/17 追記: 無くても動く dll を列挙した.

posted by Takenoko at 13:40| Comment(0) | programming | このブログの読者になる | 更新情報をチェックする

Kivy アプリの Windows 用実行ファイルを作成するまで (準備編)

windows 8.1 Home 64bit で, Python がインストールされていない windows でも 実行できる Kivy アプリの exe を作製するまでの過程です.

長くなったので, Python, gcc 等をインストールする準備編, PyInstaller or Nuitka を使用する作製編に分割しました. 後日, ライセンス編も書く予定です.

私の場合, 作成したファイルをネットで公開するつもりなので, Python や gcc 等は 32bit を選択しています. ファイルのバージョンは, メモを書いていた時点での最新を選んでいます.

1. mingw-w64 32bit インストール

http://mingw-w64.org/doku.php/download/mingw-builds

で, Installation: Sourceforge をクリックするとページ遷移し, インストーラが自動的にダウンロードされます.

mingw-w64-install.exe

を実行し,

Ver 8.10
i686
posix
sjlj
0

を選択します.

デフォルトのインストールパスが長いので,

C:\mingw-w64\i686-8.1.0-posix-sjlj-rt_v6-rev0

に変更します.

環境変数の Path に

C:\mingw-w64\i686-8.1.0-posix-sjlj-rt_v6-rev0\mingw32\bin\

を追加します.

コマンドプロンプトを開き,

gcc -v

と入力し, いろいろと情報が出てきたら成功です.

2. Python3 32bit をインストール

https://www.python.org/downloads/windows/

から, Stable Releases の, Nuitka が対応している最新バージョン (現時点では 3.7.5) の Download Windows x86 executable installer をクリックしてインストーラをダウンロードします.

python-3.7.5.exe

を実行します.

Add Python 3.7 to PATH にチェックを入れ, Install Now をクリックします. Path は自動的に追加されるようです.

3. Kivy をインストール

コマンドプロンプトを管理者として開き, 以下の, '#' でコメントアウトしていない行を順に入力します.

python -m pip install --upgrade pip wheel setuptools
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
#python -m pip install kivy.deps.gstreamer
#python -m pip install kivy.deps.angle
python -m pip install kivy

インストールが終わったら,

pip list

と入力し, Kivy がインストールされていることを確認します.

*コメントアウトした行について

#python -m pip install kivy.deps.gstreamer

Kivyを使い始める

には, "Kivyには既にオーディオとビデオのプロバイダがありますが、より高度なものにはGStreamerが必要です。" と書いてあります. また, 動画プレイヤーも入っているらしいです. 私には必要なさそうなので入れませんでした.

#python -m pip install kivy.deps.angle

Kivy Windows Hello Worldへの道 真っ黒画面

には, "OpenGl ESのDirectX実装" と書いてあります. 必要かどうかわからないので, 必要になった時点で入れれば良いのだろうと思います.

4. Kivy のエラー対策

Windows で kv ファイルを読み込む際にエラーが出るようなので,

C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\kivy\lang\

の (環境やバージョンによって場所は違うはず) builder.py を変更します.

if __debug__:
trace('Lang: load file %s' % filename)
with open(filename, 'r') as fd:
kwargs['filename'] = filename
data = fd.read()

with open(filename, 'r') as fd:

with open(filename, 'r', encoding='utf8') as fd:

に書き換えます.

5. PyInstaller をインストール (使用する場合)

python -m pip install pyinstaller

と入力し, 終了後,

pip list

と入力し, インストールされていることを確認します.

6. Nuitka をインストール (使用する場合)

python -m pip install nuitka

と入力し, 終了後,

pip list

と入力し, インストールされていることを確認します.

作製編 へ続きます.

posted by Takenoko at 12:48| Comment(0) | programming | このブログの読者になる | 更新情報をチェックする

2019年09月06日

JNetHack ゲヘナ

ゲヘナまでやってきた.

jnhfillice.png
jnhfillfire.png

パッチを自作して, ゲヘナの迷路をこういうランダムマップで置き換えています. JSporkHack のスクリーンショットに影響されました. あの迷路, 正直, 退屈だなあと, 20 年程思い続けていました.

jnhinv.png

ちょっと準備しすぎた.

jnhorcus.png

虐殺の巻物は, 呪われたもの以外は, m に対してのみ使うことにしています. 店に出現できなくなるため, その分アイテムが増えます.

ラベル:nethack Roguelike
posted by Takenoko at 11:49| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年09月01日

JNetHack TNG Patch 用 Patch 1.30

JNetHack TNG Patch 用 Patch の Version 1.20 です. 以下の修正を行います.

1. reject された噂を追加
2. ショッカーの効果が機能するように
3. ショッカー使用時のメッセージを追加
4. 力の杖の SPFX_TOUCH が機能するように
5. 力の杖に SPFX_NOGEN フラグを追加
6. ムーマクベーンが巨大ムーマクにも効くように
7. ムーマク, 巨大ムーマクの色を白に変更
8. ガラスの指輪の素材を IRON から GLASS に変更
9. ローグレベルのモンスターの G_GENO フラグを除去, M2_NOPOLY フラグを追加
10. TNG の追加ユニークに M2_NOPOLY フラグを追加

ローグレベルのモンスターやユニークモンスターが変化によって出現してしまうことがあったため, それを防ぐための修正などを行いました. 多分防げていると思います.

ファイル ダウンロード

使い方は, JNetHack3.4.3-0.11 に TNG 最新安定版 Patch を当てた後,
$ bzcat ../jnh3.4.3-0.11-tng-fix-v130.patch.bz2 | patch -p1
と入力するだけです. テスト版に適用できるかどうかはわかりません.

余談ですが, 私が遊んでいたオリジナルの TNG のバージョンは, ローグレベルのモンスターが通常のレベルに出現することがよくあり, ノームの鉱山で翼ライオンによく殺されたものです.

ラベル:Roguelike nethack
posted by Takenoko at 21:39| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年08月31日

JNetHack 3.4.3 魔法防御, ドレイン耐性, 騎乗スキル上昇

JNetHack 3.4.3 のソースを読んでわかった事を自分用にメモ. 昔ネットにあったスポイラーは, だいぶ少なくなってしまったし. C 言語は全く自信がない. 読み間違いがあるかもしれない.

src/monst.c
攻撃属性に AD_MAGM (魔法の矢) がある場合 (灰色ドラゴン, 天使, 賢者, イーノグ), 灰色ドラゴンの子供である場合, 攻撃属性に AD_RBRE (ランダムブレス) がある場合 (クロマティック・ドラゴン) は, 魔法防御を持つ.

src/monst.c
アンデッド, 悪魔, 獣人, デスはドレイン耐性を持つ.

src/hack.c から呼ばれている, src/steed.c の exercise_steed
騎乗した状態で移動するごとに, urideturns に +1 される. 待機では上昇しない. urideturns が 100 以上になった際に 騎乗スキル経験値に +1 され, urideturns が 0 になる. 降りたりしても, urideturns が減ることはない.

ラベル:nethack Roguelike
posted by Takenoko at 12:31| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年08月23日

JNetHack フォント変更 スクリーンショット

jnhgnome.png

NetHack tty TrueType Tile Font で公開されているフォントに変更してみました. "{" と "}" のような, 一見で見分けづらいシンボルが見やすくなるし, なにより美しい. すばらしい. 私は, NPC だけはアルファベットで表示しています. そのほうがわかりやすい.

jnhmumak.png

ムーマクやばい. イメージほど遅くないし.


この表示だと, htmldump で出力した map がまともに表示されない. 一旦ゲームを終了し, フォントを戻して出力すると, 問題はなかった.

19/08/24 追記 文章を修正.
ラベル:nethack Roguelike
posted by Takenoko at 15:39| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年08月22日

JNetHack TNG Patch 用 Patch 1.20

JNetHack TNG Patch 用 Patch の Version 1.20 です. 以下の修正を行います.

1. reject された噂を追加
2. ショッカーの効果が機能するように
3. ショッカー使用時のメッセージを追加
4. 力の杖の SPFX_TOUCH が機能するように
5. 力の杖に SPFX_NOGEN フラグを追加
6. ムーマクベーンが巨大ムーマクにも効くように
7. ムーマク, 巨大ムーマクの色を白に変更

ムーマクベーンが, TNG で追加された巨大ムーマクに効果が無いのはあんまりだと思ったので.

ファイル ダウンロード

使い方は, JNetHack3.4.3-0.11 に TNG 最新安定版 Patch を当てた後,

$ bzcat ../jnh3.4.3-0.11-tng-fix-v120.patch.bz2 | patch -p1

と入力するだけです. テスト版に適用できるかどうかはわかりません.
ラベル:nethack Roguelike
posted by Takenoko at 13:08| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年08月09日

JNetHack TNG Patch 用 Patch を作製しました

以前の記事 の, TNG Patch への変更内容を Patch にしました. reject された部分も修正してあります.

ファイル

JNetHack3.4.3-0.11 に TNG 最新安定版 Patch を当てた後,

$ bzcat ../jnh3.4.3-0.11-tng-fix.patch.bz2 | patch -p1

と入力するだけです.
ラベル:Roguelike nethack
posted by Takenoko at 12:52| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年07月31日

JNetHack TNG Patch を当てた後に

JNetHack TNG (3.4.3 対応版, 最新安定版) で気になることがあったので, 少し変更してみました. パッチを当てた後に以下の変更を行い, コンパイルします.

1. 追加された属性武器が効果を発揮しない

ムーマクベーンは炎, ショッカーは電撃属性攻撃武器ですが, SPFX_ATTK フラグがついていません. これによりダメージ増加効果が発生しないことをショッカーで確認したので, これを解決します.

include/artilist.h

Mumakbane, Shocker に SPFX_ATTK flag を追加

2. ショッカーの攻撃時メッセージ

ショッカーで攻撃した際, 巨大なハンマーは, と形容されます. ミョルニール以外の電撃武器は考慮されていないようです. というわけで, ショッカー用のメッセージを追加します.

src/artifact.c

if (attacks(AD_ELEC, otmp)) {
if (realizes_damage)
の下のメッセージを



に変更する.

3. 力の杖

力の杖の効果は, コメントやコードを読むと, 他属性, 他クラスのアーティファクトに触れてもペナルティを受けずに使用できるようになる, という意図があるようですが, 実際にはうまく動いていないようです. そこで, 力の杖を wield 所持している場合, そういう風に動作するように変更しました.

include/prop.h

#define SECOND_CHANCE
の下に



を追加. その下の LAST_PROP の値を (ART_TOUCHABLE) に変更する.

include/youprop.h

#define Lifesaved
の下に



を追加

include/artilist.h

Wand of Might の
(SPFX_RESTR|SPFX_TOUCH), 0

SPFX_RESTR, SPFX_TOUCH
に置換

src/artifact.c

set_artifact_intrinsic の後半,
SPFX_REFLECT の on/off の下に



を追加. また,

if (oart->spfx & SPFX_TOUCH) return 1;

をコメントアウトし, その下に,



を追加.


間違いがある可能性があります. とりあえず, 期待したように動作することを, Wizard モードで確認しました.

19/08/08 追記
wield だと, 武器アーティファクトに効果が発揮されないため, 所持に修正.

19/08/09 追記
パッチ を作製しました.

19/08/22 追記
パッチ 1.20 を作製しました.
posted by Takenoko at 16:29| Comment(0) | game | このブログの読者になる | 更新情報をチェックする