web-dev-qa-db-ja.com

`.py`拡張子を入力せずにpythonスクリプトを実行する

MacOSCatalinaでZshを使用しています。

私は読んでいましたPythonで退屈なものを自動化するそしてその中で作者はターミナルにmapitと入力するだけでmapIt.pyを実行します。

これを行うために、コードの先頭にシバンを追加しました。

#!/usr/bin/env python

また、chmod +x script.pyでマークを付け、ディレクトリをPATHに追加しました。

ただし、実行するには、script.pyと入力する必要があります。 scriptだけを入力しても機能しません。
これどうやってするの?

2
alibiineed

私は思う 私はそれをオンラインで見つけた 。このフラグメント

_C:\> mapit 870 Valencia St, San Francisco, CA 94110
_

(つまり、_C:\>_)およびその他の詳細は、作成者がWindowsを使用していることを示しています。 Windowsでは、拡張子なしで名前を入力して、特定の拡張子のファイルを実行する方法があります。作者はおそらく_.py_の機能を有効にしています。これを比較してください:Pythonスクリプトを_.py_拡張子を指定せずにWindowsで実行する

Unix/Linuxでは、_.py_の_script.py_は名前の一部にすぎません。拡張の概念はありません(おそらくユーザーの心の中の概念以外)。

したがって、スクリプトに_script.py_ではなくscriptという名前を付けるだけです。 _script.py_またはscriptのどちらを入力しても同じスクリプトを実行できるようにする場合は、スクリプトを1つの名前の下に配置し、別の名前から実際のスクリプトへのシンボリックリンクを作成します。

(少なくともLinuxでは)script(1)ユーティリティがあることに注意してください。 PATHに応じて、コマンドscriptがスクリプトまたはユーティリティ(インストールされている場合)を実行します。


別のアプローチは、fooが_foo.py_(任意のfooに対して)になった場合に、シェルに_command not found_の実行を試行させることです。この一般的な質問を参照してください:

例としてこれらの2つの答え(Bash用であることに注意してください):

Zshでは、関数の名前は _command_not_found_handler_ です。例の1つをZshに移植して、ソリューションを構築します。

2