Unix環境で仮想マシン用のAPIを開発しています。ほとんどのモジュールはPythonで開発されています。これについていくつかの質問があります。
私のファイル拡張子はabc.py
..で、それをコマンドとして使用したいと思います。たとえば、virtman dominfo [vmid]
コマンド構文でなければなりません。今./virtman.py dominfo [vmid]
これが起こるようにしなければなりません。#!/usr/bin/python
Pythonファイルの最初の行があります。それでは、どのようにコマンドを発行しますか?
私のエコ $PATH は '/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin0' と同じです。
多くの記事を読んでいますが、はっきりと理解していないので、どんなヒントや提案でも役に立ちます。
答え1
誤解されたようです。これはabc.py
コマンドではありません。実行できる場合は、名前にドットがあるプログラムだけです。実行できるという意味で実行する./abc.py
ので、実行ビットを設定する必要があります。もしあなたなら持つあなたがすることはpython abc.py
命令ではありません。
通常、通常のPythonファイルをabc.py
実行可能にするには、最初の行が次のようになっていることを確認する必要があります。
#!/usr/bin/env python
(これは/usr/bin/env
プログラムがあり、python
にあるコマンドを見つけると仮定します。/usr/local/bin
また、デフォルトpython
(通常は同じ特定のPythonバージョンへのリンク)を実行するとします。これがコマンドとして機能している場合でもpython2.7
使用できます。python3
)
後でやる
chmod +x abc.py
mv abc.py abc
その後、実行できます./abc
。現在のディレクトリがパスにある場合、またはabc
パスのディレクトリに移動した場合は、abc
どこでも実行できる必要があります。
しかし、ファイルの名前変更と移動には欠点もあります。
from abc import SomeClass
ファイル名が変更されたため、これを行うことはできません。- ファイルがリビジョン管理対象である場合は、リビジョン管理ができなくなる可能性があります。
だから私が通常することは、/usr/local/bin/abc
次のような新しいファイルを作成することです。
#!/usr/bin/env python
from abc import main
main()
そして下部にabc.py
:
def main():
doing the real stuff
if __name__ == '__main__':
main()
Pythonがモジュールを検索するには、ディレクトリがabc.py
PATHに存在する必要がありますが、これは変更する必要はなく、すべてのプログラムでインポートとして使用できますpython abc.py
。
1命令名からドット(.)を削除する必要がありますが、必ずしも必要ではありません。名前を変更せずに呼び出すことができます。mv
./abc.py
答え2
Anthonの答えは正確ですが、深刻なPythonプロジェクトの場合は見てください。ゆがむ標準ライブラリのモジュール。それデザイン済みPythonモジュールと実行可能ファイルをシステムに「正しい方法」でデプロイし、次の手順を実行します。
このモジュールは標準ライブラリにあり、最もよく知られているPythonパッケージ(Django、NumPy、Celeryなど)で使用されるため、Python開発者はこのモジュールに精通しているか慣れている必要があります。新規ユーザーは、プロジェクトのデプロイ方法をすぐに把握します。
プロジェクトのファイルとパッケージが定義されたら、単に実行して
python setup.py install
システムにパッケージを展開して更新します。PATH
変数を手動で更新したり、ファイルをコピーしたり、実行/usr/local/bin
可能にしたりすることなく、すべて処理されます。pip install -e
を使用して開発モードでパッケージをインストールできます。また、WindowsまたはOSX環境でもある程度移植可能です。
また、次のパラメータパーサーを使用することは十分にお勧めできません。引数の解析中コマンドラインツールを設計する場合はこれで十分です。