LoginSignup
1
0

More than 3 years have passed since last update.

画像ビューワを作ったので色々な所(Pypi, AUR)にアップロードしようとして躓いた所

Posted at

画像ビューワを作ったので色々な所(Pypi, AUR)にアップロードしようとして躓いた所

SaltViewerというのを開発した.
ざっくりと言うと,mcomixからmcomix3への移行の中で中々使い辛い所が出てきたのだ.
それを解決するために自分の欲しい機能を詰めこんだものを作ることにした.

アプリの概要

そもそもmcomixmcomix3の代替なんて作らなくても色々あったりする.vimivとか.
でもキーバインドが馴染めなくて,カスタマイズが上手くできなかったりした.

mcomix3になってから特にDeleteが消えたり,External Commandが上手く設定できなかったりと不便になってしまった.
mcomix2で我慢していたが,python2は嫌なので作って乗り換えることにした.

特徴

  • 数字指定でページジャンプができる
  • 先頭と末尾へのジャンプも可能
  • 2ページ表示に対応
  • 右左,左右への切り替えも対応
  • 超シンプルなシングルファイルスクリプト
  • アニメーションGIF, SVGに対応
  • zip, rar, 7z, pdfに対応(7zはやたらと遅い)
  • キーバインドを設定できる
  • pipやyayでインストールできる

結構モリモリの割にコード数は非常にコンパクトなはず.

Pypiに上げようとして躓いた所

リポジトリ直下にファイルが多いことは悪だと考えているので,
srcとかsetup.cfgを置きたくないので,setup.py一本でいく.
MANIFEST.inも作らない.

また,これはライブラリではなくコマンドとして実行することを想定している

setup.pyを書く

descriptionも面倒なのでREADME.mdから拝借.
setup_requiresはPKGBUILDでの紆余曲折の名残りで書いたが別にいらないと思う.
本当に最低限しか書いていない.

重要なのが最後のentory_pointsで,これによってsalt-viewerというコマンドを生成してくれる.
これによって,pippyinstallerみたいにコマンドとして実行できるようにしてくれる.

import setuptools

with open("README.md", "r") as f:
    description = f.read()

requirements=[
        "natsort",
        "pillow",
        "send2trash",
        "rarfile",
        "py7zr",
        "cairosvg",
        "pdf2image",
    ]
setuptools.setup(
    name="salt-viewer",
    version="0.1.2",
    description="Simple image viewer",
    long_description=description,
    long_description_content_type='text/markdown',
    url="https://github.com/GuiltyCat/SaltViewer",
    author="GuiltyCat",
    keywords="image, viewer, archive, animation",
    install_requires=requirements,
    setup_requires=requirements,
    py_modules=['salt_viewer'],
    entry_points={"console_scripts": ["salt-viewer=salt_viewer:main"]},
)

アップロードして気付くPypiのstable性

Pypiって同名のパッケージができないようかなり厳密に作られていて,ある意味で融通が聞かない.
なので,アップロードする時は慎重にする必要がある.

具体的には

  • name
  • version

こいつを重複してアップロードすることはできない.
一度削除してもだ.
なので,アップロードして失敗に気付くと,自動的にバージョンを上げざるをえなくなる.

AURに上げようとしてPKGBUILDで躓いた所

問題はただ一つだ.公式パッケージにないpythonライブラリへの依存をどう解決するかだ.
これはArchWikiを見ても書いていないしすんごい分かり難いので解説する.

まず,pythonのパッケージだが,基本は公式パッケージのものを優先してdependsに書く.
これは当然誰もが考えるだろう.でも中には存在しないものもあったりする

そしてpipはよほど特別なものでない限り使わないのが原則だ.

AURにはある場合

ほぼ間違いなくAURに上がっているのでdependspython-pdf2imageとか書いたりするのだが,
makepkg -sをすると全ての依存関係が解決されませんでしたとか出て,失敗する.

うんやかんや悩んだが,答えは簡単で公式リポジトリ以外のパッケージはmakepkgする前に手動でいれるのが原則なのだ.
なので挙動としてはこれでOKで何も問題ないのだ.

逆に言えば,yay -Sとかの場合はmakepkgを実行する前に依存関係を公式リポジトリとAURから検索してインストールしてくれているのだ.

pkgname=salt-viewer
pkgver=0.1.2
pkgrel=1
arch=("any")
url="https://github.com/GuiltyCat/SaltViewer"
license=("GPL")
depends=("python" "unrar" "poppler" "python-send2trash" "python-pillow"  "python-send2trash" "python-cairosvg" "python-natsort" "python-py7zr" "python-pdf2image" "python-rarfile")
makedepends=("python-setuptools")
md5sums=('SKIP')

optdepends=("unarchiver: unrar alternative" "libarchive: unar alternative")

source=("https://github.com/GuiltyCat/SaltViewer/archive/refs/tags/v${pkgver}.tar.gz")
package(){
    cd SaltViewer-"${pkgver}"
    python setup.py install --verbose --root="${pkgdir}/" --optimize=1 
}

このままmakepkg -sを実行してもpython-pdf2imagepython-rarfileは見つからないがこれで正解.
PKGBUILDをアップロードして,yay -Sをすると,自動でAURから探し出してインストールしてくれる.

GitHubから持ってきたGitのLogに個人用メールアドレスが!

今の今まで気付いていなかったが,git logで登録したメールアドレスが表示されるのね.
それはいいんだけれど,これPublicなのよね.

ということで,盛大なやらかしをしてしまっておりました.
一応対策しましたが,修正しきれていない部分があるかも.

で全てのコミットのuser.emailとuser.nameを書き換えるにはfilter-branchを使う

git filter-branch -f --env-filter 'export GIT_COMMITTER_EMAIL="<email>"; GIT_COMMITTER_EMAIL="<email>"'

最後にこれを無理矢理pushする.

git push -f origin main --all
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0