0

ルート パッケージ内に 3 つのネストされたパッケージを含むプロジェクトがあります。

clsgen 
-__init__.py
-main.py
-parsing
    -__init__.py
    - class1.py
    - class2.py
-generator
    -__init__.py
    -some_class_files
    -...
-utils
    -__init__.py
    -some_modules
    -...

パッケージのインポートと使用に関しては、(一般的にPythonで-おそらくJava/Eclipseが正しく行う唯一のことです)多くの困難を抱えています。最近、次のように相対インポートを使用してスケートをすることができましたfrom .details import Details: 現在のパッケージ/ディレクトリ内の詳細と呼ばれるモジュールから、「詳細」という名前のクラスをインポートします。プログラムにいくつかの新しい (壊れる可能性のある) 変更を追加しましたが、上記の同じ相対インポート行が機能しなくなりました。インタープリターは私のパッケージがモジュールであると考えているようです。そのため、代わりに絶対インポートを使用できません。

たとえば、インポートを次のように変更すると:

from parsing.details import Details

次のエラーが表示されます。

>>> %Run class_dict.py
Traceback (most recent call last):
  File "C:\Users\Ben\VsCode\python\classgenerator\parsing\class_dict.py", line 12, in <module>
    from parsing.details import Details
  File "C:\Users\Ben\AppData\Local\Programs\Thonny\lib\site-packages\thonny\backend.py", line 305, in _custom_import
    module = self._original_import(*args, **kw)
ModuleNotFoundError: No module named 'parsing'

次のように、必要に応じて組み込みパッケージを上書きしようとさえしました

__package__ = "parsing"
from parsing.details import Details

プロジェクトのパッケージ構造が正しく設定されていることには自信があります (上記の最初の例のように (ただし、より詳細に))。また、パッケージ、モジュール、相対インポートと絶対インポートの概念を理解していると確信しています。しかし、これは私が Python でマルチパッケージ プログラムを作成しようとするたびに私を悩ませる問題です。エラーを指摘したり、この永続的な問題を軽減するために実行できるアクションを提案したりしていただければ幸いです。

4

1 に答える 1