簡體   English   中英

盡管PyCharm具有自動填充功能,但ValueError嘗試了相對導入而不是頂級軟件包

[英]ValueError attempted relative import beyond top-level package, despite PyCharm autofilling suggestions

我正在嘗試從同級包中導入模型並得到

ValueError: attempted relative import beyond top-level package

奇怪的是,我是根據PyCharm建議自動填充的,所以IDE正在注冊模塊,但是我的構建失敗了...

PyCharm屏幕截圖](https://imgur.com/a/1yQnQZF)[![在此處輸入圖片描述 ] 1

這是我的項目結構:

app
 \
  +-core
  |  \
  |   +- __init__.py
  |   +- models.py   <- the Tag model is present here
  |
  +-scheduler
  |  \
  |   +- __init__.py
  |   +- serializers.py  <- importing app.core.models.Tag in this file
  |
  +- __init__.py

PyCharm項目結構屏幕截圖

app.scheduler.serializers.py:

from rest_framework import serializers
from ..core.models import Tag


class TagSerializer(serializers.ModelSerializer):
    """Serializer for tag objects"""

    class Meta:
        model = Tag
        fields = ('id', 'name')
        read_only_fields = ('id',)

我一直在為此撓頭,似乎無法弄清楚……

我嘗試使用絕對路徑,甚至使用PyCharm導入實用程序將其添加:

from rest_framework import serializers
from app.core.models import Tag


class TagSerializer(serializers.ModelSerializer):
    """Serializer for tag objects"""

    class Meta:
        model = Tag
        fields = ('id', 'name')
        read_only_fields = ('id',)

但隨后我得到: ModuleNotFoundError: No module named 'app.core'

我正在使用

python manage.py runserver

真正的答案是頂層應用程序文件夾未包含在python路徑中,我提到堆棧溢出答案涉及以下方面:

... python不會記錄軟件包從何處加載。 因此,當您執行python -m test_A.test時,它基本上只是舍棄了test_A.test實際上存儲在包中的知識...

並建議使用from core.models import Tag ,它似乎可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM