当前位置: 首页 > 知识库问答 >
问题:

没有已知父节点时尝试相对导入

华知
2023-03-14

根据一些答案,我试图更具体一些。我想在我的main中导入打印、模型和代码。派克

我知道这个问题被问了很多,但是我仍然不知道我的代码有什么问题!我有一个这样的项目目录

-project
   --__init__py
   --main.py
   --print.py
   --requests
        --__init__.py
        --models.py
        --code.py

我想导入从print.py和*从请求因此,我试图添加这些行在main.py

from . import print
#or
import print

#for requests I tried
import os.path
import sys
sys.path.append('./requests')
from requests import *

所有这些行都会导致相同的导入,即在没有已知父项的情况下尝试相对导入,

使用Python 39有人知道问题出在哪里吗?我很困惑,这似乎不起作用,在旧版本中可能吗?

共有2个答案

谢正初
2023-03-14

您的主文件应该在项目目录之外,以便将其用作包。然后,从您的主文件中,您可以使用from导入project.print导入...

在项目包内,可以进行相对导入。

孟俊晖
2023-03-14

您绝对不应该使用sys执行任何操作。路径。如果您使用的是正确的Python包结构,那么导入系统应该像这样处理所有事情。

根据您描述的目录结构,project将是您的包的名称。因此,当在一些外部代码中使用包时

import package

或者使用子模块/子包

import project.print
import project.requests

等等。

对于包内的模块,可以使用相对导入。当你写作时

我想从打印导入。py和*来自请求,因此我尝试了

不清楚从哪里导入它们,因为这对于相对导入很重要。

例如,在project/main中。py要导入打印模块,您可以使用:

from . import print

但是如果它来自项目/请求/代码。py您将使用

from .. import print

顺便说一句,“print”可能不是模块的好名字,因为如果导入print模块,它将隐藏print()内置函数。

 类似资料: