私はPythonモジュールは、ディレクトリのトップレベルの機能run
とサブモジュールrun
の両方を持っている(すなわち、パッケージ)として実装されている場合は、私はいつもの機能をインポートするには、from example import run
に数えることができますか? Python 2.6とLinuxでのJython 2.5の場合のテストに基づいていますが、これを一般的に評価できますか?輸入の優先順位に関する情報を検索しようとしましたが、何も見つかりませんでした。モジュール 'example'に関数 'run'とサブモジュール 'run'の両方が含まれている場合、 'from example import run'を常にカウントすることができますか?
背景:
私は、人々は一般的に、コマンドラインからツールとして実行し、かなり大規模なパッケージを持っているだけでなく、時にはプログラムで使用します。
example/__init__.py
:
def run(*args):
print args # real application code belongs here
example/run.py
:私は両方の用途のためのシンプルなエントリー・ポイントを持っており、このようにそれらを実装することを検討したいと思います
import sys
from example import run
run(*sys.argv[1:])
最初のエントリ・ポイントのユーザーがアクセスすることができますPythonのモジュールは次のようになります:
from example import run
run(args)
後者のエントリポイントは、ユーザーが以下のアプローチの両方を使用して、コマンドラインからモジュールを実行することができます:
python -m example.run args
python path/to/example/run.py args
この素晴らしい作品と私は必要なすべてをカバーして両方。これを実際に使用する前に、すべてのオペレーティングシステムでPythonのすべての実装で動作することが期待できる、健全なアプローチであることを知りたいと思います。
唯一の方法のようになります。これを行うにはきれいな方法は
すなわち、
run.py
で実行中のすべてのロジックと、__init__.py
最小限になりますdef a(): pass import aを – Bogdanとしてインポートすると、このようなコードが整理されます。私はそれが私が持っているいくつかの他の制約と一緒に働くと思う必要があります。そのアプローチを使用する必要がある場合、関数定義が常にモジュールをシャドウすることも知っておくとよいでしょう。 –