私の質問は、Python(3.x)パッケージと(サブ)モジュールを書くことと、__init__.py
ファイルを正しく使って名前空間を宣言することです。
私はC++でコーディングしていましたので、プロジェクトを編成するためにたくさんの別々のファイルを使いたいと思います。たとえば、(imo)モジュールに複数のクラスが含まれている場合、これらのクラスはそれぞれ別のファイルに存在する必要があります。(サブ)モジュールで__init__.pyを使用して名前空間を定義する方法?
私はPythonでの開発に慣れていないので、私の考えを簡単な質問で策定することは難しいです。 次に、小さなpythonパッケージを例として考えてみましょう。
ディレクトリレイアウト
dir
|
+-- example
| |
| +-- script.py
|
+-- package
|
+-- __init__.py
|
+-- foo.py
|
+-- subpackage
|
+-- __init__.py
|
+-- bar.py
のファイルを見てみましょう。
package/foo.py
ファイル内容:
def foo:
print('foo')
package/subpackage/bar.py
は:
def bar:
print('bar')
次example/script.py
が正常に動作します。
import sys
sys.path.insert(0, '..')
import package
import package.subpackage
package.foo.foo()
package.subpackage.bar.bar()
私はpackage.foo.foo()
/package.subpackage.bar.bar()
を使用することを好きではないとpackage.foo()
/package.subpackage.bar()
を使用したいと思います。
from package.subpackage.bar import bar
を使用したくありません。サブパッケージの名前空間をスクリプトに混ぜる必要はありません。
ソリューションは、私はそれを達成するために__init__.py
ファイルを使用していました。
package/__init__.py
:
from package.foo import foo
package/subpackage/__init__.py
:
from package.subpackage.bar import bar
質問
これは、名前空間を定義するのは良いのpython-ような方法は何ですか?あるいは、Pythonでパッケージのファイルシステムを整理するためのより良い/共通の方法があります。 (私はこれのために適切なチュートリアル/例を見つけることができませんでした。)ファイル
package/subpackage/__init__.py
で- は、なぜそれがあることを持っています:
from package.subpackage.bar import bar
ない:
を?
これはエラーになり:
Traceback (most recent call last):
File "script.py", line x, in <module>
import package.subpackage
File "..\package\subpackage\__init__.py", line x, in <module>
from subpackage.bar import bar
ImportError: No module named 'subpackage'
ありがとう:考え抜かれた質問に対して、
例と参照が良いStackOverflowの質問のための範囲内ではありませんが、ここでいくつか紹介しますあなたの答えです。 基本的には、2番目のリンク(「Pythonの方法...」)は、私が探していたStackOverflowの質問です。 著者が言うように、私は「1トンのコードを投げつける」という考え方を1つのファイルに入れるのが好きではありません。しかし、Pythonはファイルをモジュールとして見ているので、良い解決策はないようです。 私は '__init __。py'-files [ここ](https://www.blog.pythonlibrary.org/2012/07/08/python-201-creating-modules-and-packages/)の編集を考えています。 。 –