gpt4 book ai didi

python - 有人可以解释这种奇怪的 Python/Django 导入行为吗?

转载 作者:太空狗 更新时间:2023-10-30 03:06:39 24 4
gpt4 key购买 nike

我有一个目录结构如下的项目:

mywebsite/
manage.py
__init__.py
myapp/
models/
__init__.py
base.py

myapp/models/base.py 包含:

class X(object):
pass

myapp/models/__init__.py 包含:

from base import X

现在,如果我执行 manage.py shell,我可以进行以下 session :

> import mywebsite.myapp.models
> import myapp.models
> mywebsite.myapp.models.X == myapp.models.X
False

但是,如果我将 myapp/models/__init__.py 更改为:

from myapp.models.base import X

然后我得到了预期的 True。

我想我遗漏了一些关于导入如何工作或 Django 在使用 manage.py shell 时如何更改路径的信息。

谁能解释一下?

最佳答案

当您打开 Django shell 时,它会将您项目的路径添加到 sys.path .您可以通过运行 import sys; 来查看它;在 Django shell 和普通 python shell 上打印 sys.path 并比较输出。您会注意到 Django shell 的输出包括 mywebsite 目录的路径作为列表的第一项。

基本上,这意味着两个导入创建了两个不同的模块对象,因为它们是从 different points in the search path 获得的.比较检查返回 False,因为模块对象具有不同的 ID(内存地址)

# These two values will be different
id(mywebsite.myapp.models)
id(myapp.models)

关于python - 有人可以解释这种奇怪的 Python/Django 导入行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com