1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonパッケージをシェルスクリプト/バッチファイルに埋め込む

Posted at

Pythonの組み込みライブラリを眺めていたら面白そうなものを見つけました。zipファイルからモジュールを直接インポートできるそうです。

何かに使えないかと思い調べたところ、yt-dlpが配布に利用しているのを見つけました。パッケージを収めたzipファイルの先頭にshebangをつければ、同様にしたPythonファイルと同じようにシェルから直接実行できるということです。

Windowsのコマンドプロンプトにshebangはないですが、Pythonには1行目を無視するオプションが用意されており実質shebangを実現できます。Pythonはpyランチャー経由で起動するのが最も柔軟でしょうか。

> py --help | Select-String -CaseSensitive "^-x"

-x     : skip first line of source, allowing use of non-Unix forms of #!cmd

おおまかに理解したので少し汎用的に使えるようにして公開しました。pipxなどでインストールできます。このパッケージ自体がこのパッケージで固められるようになっているので、試してなんとなくなっとくしてください。

1ファイルに固めるということで見た目は似ていますが、PyInstallerやNuitkaとは異なり、実行環境にもPythonをインストールする必要があります。またグローバルのPython環境(より正確にはshebangが指定するPythonインタプリタの環境)にインストールされているパッケージしか利用できません。たどってzipに含めれば可能でしょうが、ずっと難しくなります。

yt-dlpにはランタイムの依存パッケージがひとつもなく、かつLinux環境にはほぼ間違いなくPythonがインストールされているので、「recommended for Linux/BSD」とことわって配布に利用しているのですね。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?