プロジェクト内で内部インポートを使用するのに問題があります。これは私のプロジェクトの部分的なツリー構造です:
app
|- Gui.py
|- Main.py
|- logger.py
|- config.py
|- WebParser (package)
|- __init__.py
|- LinksGrabber.py
|- LyricsGrabber.py
|- ImagesGrabber.py
|- (Many other packages...)
logger.py
およびconfig.py
モジュールはすべてのパッケージのモジュールで必要であり、独立しています (組み込みモジュールのみを使用します) 。パッケージ内からこれらのモジュールにアクセスするのは難しいです。
これは、構成アクセスとログ機能を有効にするために、私がそれを達成しようとした方法ですWebParser\LinksGrabber.py
:
# WebParser\__init__.py:
sys.path.append('..') # for outside-package modules
import config
from logger import log
# WebParser\LinksGrabber.py:
import WebParser
config = WebParser.config
log = WebParser.log
問題点:
- これにはコードの匂いがあります。この動作を達成するためのより良い方法があるに違いありません。
- 暗黙的にインポートせずに、すぐに呼び出し
import WebParser
て使用したい。これは 内のモジュールをインポートすることで実行できますが、すべてのパッケージのモジュールがパッケージ自体をインポートし、再帰的なインポートを発行するため、これは不可能です。WebParser.LinksGrabber
WebParser.LyricsGrabber
__init__.py
より良い実装、または別のコード設計を提案できますか?