python包内导入模块失败?
PHP中文网
PHP中文网 2017-04-17 17:18:49
0
3
270

我的文件是这样的

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中吗?

请各位看看,谢谢。

PHP中文网
PHP中文网

认证0级讲师

全員に返信(3)
巴扎黑

コマンド ライン パラメーター -m は、モジュール形式でモジュールを開始できます。このとき、名前はモジュール名 (__main__ ではありません) であり、相対インポートをプログラムに追加できます。操作はモジュールの上のディレクトリで実行する必要があります (現在のディレクトリではありません)。形式: python -m new.w3school_spider
最後に .py がないことに注意してください。

items.py をスパイダーに直接置くこともできます。現時点では、items.py と w3school_spider.py は同じ

フォルダーにあり、items import W3schoolItem
から直接相対インポートが実行されます。

最初のエラーは、Python が同じファイル内に必要なモジュールを見つけられなかったことが原因です。2 番目のエラーは、実行中のモジュール

(__main__ という名前) が相対インポートを持つことができないためです。

いいねを押す +0
Peter_Zhu

その前に

を追加してみてください リーリー

相対パスは現在のモジュール名に対する相対パスであり、メイン モジュール名は "__main__" である必要があります。そのため、
相対パスを持つパッケージはメイン モジュール内で見つからず、絶対パスは使用済み。相対パス
を使用できるのは、メイン以外のモジュール

のみです。
いいねを押す +0
阿神
  • w3スクール

    • クモ

      • __init__.py

      • w3school_spider.py

    • __init__.py

    • items.py

ディレクトリ構造は次のようになっており、w3school_spider.py の items.py の内容を参照していますか?

リーリー

これでうまくいくはずです。
パッケージでは、同じレベルで . を使用し、親レベルで .. を使用します。

最後に提案があります。よく使用されるいくつかのクラスまたは関数をパッケージ内の __init__.py に入れることができます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!