【问题标题】:ModuleNotFoundError: No module named 'listings' despite directory being in PATHModuleNotFoundError:尽管目录位于 PATH 中,但没有名为“listings”的模块
【发布时间】:2021-08-19 23:41:37
【问题描述】:

我有这样的文件结构。

remindMe
│
│
├───remind_me_django
│   └───listings
│           models.py
│           __init__.py
│
└───scrapy
    └───scrapy_project
        │   items.py
        │   __init__.py
        │
        └───spiders

我正在尝试将我的 models.py 文件导入 items.py 但无济于事。尝试导入 items.py 时,我收到 ModuleNotFound 错误。其他建议说将我的目录添加到我的路径中,但到目前为止也没有成功。

sys.path.append("C:\\Users\\Denze\\Projects\\remindMe\\remind_me_django\\listings")

from listings.models import Product

我也试过了:

from remind_me_django.listings import Product

有趣的是这个导入,如果我在 VSCODE 中右键单击导入并转到它的定义,它会打开该模块的 init 文件,所以 VSCODE 知道我在引用什么,但 Python 不知道?

【问题讨论】:

    标签: python django


    【解决方案1】:
    root
    ├── remind_me_django
    │   └── listings
    │       └── models.py
    └── run.py
    

    models.py:

    var = "the var"
    

    运行.py

    import sys
    
    sys.path.append("/Users/user/root/remind_me_django/listings")
    
    try:
      from listings.models import var
    except:
      print('here is exception')
    
    from models import var
    print("here is OK. var is", var)
    
    sys.path.append("/Users/user/root/remind_me_django")
    
    from listings.models import var
    print("here is also OK. var is", var)
    

    输出:

    here is exception
    here is OK. var is the var
    here is also OK. var is the var
    

    解释:

    listings 添加到系统路径后,python 也会开始搜索listings 目录中的库。 listings 我们有什么?正确的!在listings 里面我们有models.py,所以我们需要做from models import something

    如果将remind_me_django 添加到系统路径,python 将检查remind_me_django 中的文件夹和文件。外面的库在listings/models.py里面,所以我们需要做from listings.models import something(或from listings import models并像some_variable = models.something一样使用它)

    但是!我不建议使用sys.path 添加自定义系统路径。 The better practice is to do imports based on project structure

    【讨论】:

    • 你能解释一下吗?
    • 我会尝试一些事情并回复你
    • 你用过/Users/user/root/...吗?这只是我的示例路径。当然需要加"C:\\Users\\Denze\\Projects\\remindMe\\remind_me_django\\listings"或者"C:\\Users\\Denze\\Projects\\remindMe\\remind_me_django"
    • 连我的例子都行不通? 1.请提供完整的错误文本和models.py的内容 2.尝试sys.path.append在Django的settings.py的头部而不是使用models的文件
    猜你喜欢
    • 2021-03-20
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多