1

私は次の構造を持っています:

AXBot:
    __init__.py
    bot.py
    util.py
    settings.py
    creator
        __init__.py
        xbot.py

問題は、Pythonが「ImportError:utilという名前のモジュールがない」で終わるため、「xbot.py」に「util」モジュールをインポートできないことです...どうすれば解決できますか?

PS:インポートに次のコードを使用しています:

import util
import settings

ありがとうございました。

4

4 に答える 4

3

フォルダxbot.py 内から実行しようとしているようです。creator

これは私がxbot.py含むことで得られる出力ですimport util

C:\Users\Luke\Python stuff\AXBot\creator>xbot.py
Traceback (most recent call last):
  File "C:\Users\Luke\Python stuff\AXBot\creator\xbot.py", line 4, in <module>
    import util
ImportError: No module named util

これは私がxbot.py含むことで得られる出力ですfrom . import util

C:\Users\Luke\Python stuff\AXBot\creator>xbot.py
Traceback (most recent call last):
  File "C:\Users\Luke\Python stuff\AXBot\creator\xbot.py", line 3, in <module>
    from . import util
ValueError: Attempted relative import in non-package

from .. import utilまた、の代わりにこの後者のエラーが発生しますfrom . import util

それを含むディレクトリから実行xbot.pyしている場合、Pythonはそれがパッケージ階層内で実行されていることを認識できません。xbot.pyパッケージの中にはないと思います。

インポートしようとした行をに置き換え、いくつかのディレクトリを上に移動し、utilPythonのコマンドラインスイッチを使用して実行しました。これは、ファイル名ではなくモジュール名で指定されたモジュールを実行するようにPythonに指示します。を使用する場合は、パッケージ階層を含むモジュールの完全修飾名を渡しますが、ファイル拡張子はモジュール名の一部ではないため、含めないことに注意してください。from AXBot import utilxbot.py-m-m.py

C:\Users\Luke\Python stuff\AXBot\creator>cd ..\..

C:\Users\Luke\Python stuff>python -m AXBot.creator.xbot
1232

import AXBot.util as utilの代わりに使用した場合も同じ出力が得られましたfrom AXBot import util

(実行するコードがないので、代わりに変数を入力して、util.pyその値を内部から出力しようとしました。xbot.pyこの変数の値はでした1232。)

于 2012-07-14T21:45:11.993 に答える
2

相対インポートを使用する

from . import util
from . import settings

ただし、フォルダ階層を変更することをお勧めします。また、PYTHONPATHも確認してください。通常は、同じように機能するはずです。

参照:

sys.pathハックに近づかないようにしてください。

于 2012-07-14T20:29:00.803 に答える
1

名前空間が間違っていると思います。xbot.pyから、このインポートコマンドを使用してみてください

from AXBot import util
from AXBot import settings
于 2012-07-14T20:23:21.103 に答える
0

あなたがどこにいるのかが最も重要な質問です!それによると、あなたはを使用しimportます。質問を更新してください

于 2012-07-14T20:25:42.500 に答える