0

私はPythonでプロジェクトを開始しています.コード構造は以下のようになりました:

project/
        __init__.py
        a.py
        b.py
        mainA.py
        utilities/
                   __init__.py
                   mainB.py
                   c.py

ファイルは__init__すべて空白です。

utilities/mainB.pyプログラムとして(のようなものを使用して)実行したいのですがpython main.py、mainB は と をインポートする必要がa.pyありb.pyます。だから私はfrom .. import aいくつかの他のアプローチを試みましたが、import失敗しました。エラー情報は次のとおりです。

ValueError: 非パッケージで相対インポートを試みました

だからここに質問があります:

  1. mainB.pyメインプログラムとして実行できるように修正する方法は?
  2. mainA.pyこれでメイン プログラムとして実行できます。また、 and もインポートa.pyしますb.py( import aandを使用import b)。コード構造がより複雑になる可能性があると思います。mainA.pyからモジュールをインポートする必要がある場合、どうすればそれproject/some/directoryを行うことができますか?
4

3 に答える 3

3

この前の質問を参照してください。2 つのオプションがあります。1 つは、 PEP 366__package__で説明されている属性を使用して、モジュールの相対名を設定することです。もう 1 つは、スクリプトを直接スクリプトとして実行するのではなく、(インタープリターへのフラグを使用して) モジュールとしてスクリプトを実行することです。-m

于 2012-08-29T07:28:25.427 に答える
0

Python の組み込みモジュール実行機能 ( python -m <module>) を使用できます。

python -m project.utilities.mainB

これにより、パッケージの一部として mainB を通常どおりに記述できるため、相対インポートと絶対インポートの両方が正しく機能します。

この機能の詳細については、PEP-338を参照してください。

于 2012-08-29T07:24:03.903 に答える
0

「プロジェクト」ディレクトリを PYTHON_PATH に追加してから、mainB.py に追加する必要があります。

from project import a
于 2012-08-29T07:28:58.467 に答える