我的文件是这样的
w3school:
spiders
__ __init___.py
w3school_spider.py
__init__.py
items.py
我现在在w3school_spider.py中导入items中的一个类,我写的是这样:
from w3school.items import W3schoolItem
但是显示
ImportError: No module named w3school.items
如果我改成:
from .items import W3schoolItem
则会显示:
ValueError: Attempted relative import in non-package
我搜了一下是不是路径问题?需要我把这个items.py放进c/python2.7/lib中吗?
请各位看看,谢谢。
コマンド ライン パラメーター -m は、モジュール形式でモジュールを開始できます。このとき、名前はモジュール名 (__main__ ではありません) であり、相対インポートをプログラムに追加できます。操作はモジュールの上のディレクトリで実行する必要があります (現在のディレクトリではありません)。形式: python -m new.w3school_spider
items.py をスパイダーに直接置くこともできます。現時点では、items.py と w3school_spider.py は同じ最後に .py がないことに注意してください。
フォルダーにあり、items import W3schoolItem
最初のエラーは、Python が同じファイル内に必要なモジュールを見つけられなかったことが原因です。2 番目のエラーは、実行中のモジュールから直接相対インポートが実行されます。
(__main__ という名前) が相対インポートを持つことができないためです。
その前に
を追加してみてください リーリー相対パスは現在のモジュール名に対する相対パスであり、メイン モジュール名は "__main__" である必要があります。そのため、
のみです。相対パスを持つパッケージはメイン モジュール内で見つからず、絶対パスは使用済み。相対パス
を使用できるのは、メイン以外のモジュール
w3スクール
クモ
__init__.py
w3school_spider.py
__init__.py
items.py
ディレクトリ構造は次のようになっており、w3school_spider.py の items.py の内容を参照していますか?
リーリーこれでうまくいくはずです。
パッケージでは、同じレベルで
.
を使用し、親レベルで..
を使用します。最後に提案があります。よく使用されるいくつかのクラスまたは関数をパッケージ内の __init__.py に入れることができます。