0

ゲームを書こうとしています。したがって、私はさまざまな種類のコードをたくさん持っており、それらを便利な階層に配置したいと考えています。

私は__init__.py各フォルダーに配置することを含む解決策を見てきましたが、Pythonインタープリターほどではありませんが、それでも多少混乱しています。

ここで、ディレクトリ内の、または実際に他のファイルresource1.pyから関数をインポートしたいとします。どうすればよいでしょうか。physics1.py.pyGame

私は試しましfrom bin.physics.physics1 import functionたが、明らかにそれはうまくいきません。

ご協力いただきありがとうございます。

/Game
    launcher.py
    /bin
        game.py
        __init__.py
        /physics
            __init__.py
            physics1.py
            physics2.py
    /resources
        __init__.py
        resource1.py
4

1 に答える 1

1

パッケージを作成しない限りGame(つまり、ディレクトリ__init__.py内に配置することによって)、通常のインポートメカニズムでは不可能です。GamePython相対インポートシステムは、パッケージ内でのみ機能します。ディレクトリ構造内の位置によって任意のモジュールを参照するための一般的なシステムではありません。ゲームをパッケージにすると、次のことができますfrom ..bin.physics.physics1 import function

編集:相対インポートは、メインプログラムとして実行されたスクリプトからは機能しないことにも注意してください。直接実行しようとしてresource.py相対インポートを使用すると、「非パッケージで相対インポートを試行しました」というエラーが発生します。別のモジュールからリソースをインポートすると機能します。これは、相対インポートシステムが実行中のモジュールの「名前」に基づいており、スクリプトを直接実行する__main__と、通常の名前ではなく、その名前が使用されるためです。本当に必要な場合は__package__キーワードを使用してこれを回避することは可能ですが、少し注意が必要な場合があります。

于 2012-07-04T22:16:40.023 に答える