在项目目录外导入函数的最佳方法

2024-09-28 21:58:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目具有以下结构:

.
└── mylib
    ├── __init__.py
    ├── fun1.py
    ├── fun2.py
    └── test.py

假设test.py从模块fun1.pyfun2.py导入函数,因此它包含

from fun1 import funA
from fun2 import funB

但是,当我尝试在项目目录外导入test.py时,出现以下错误:

ModuleNotFoundError: No module named 'fun1'

我可以通过在导入中指定fun1.pyfun2.py的整个路径来解决这个问题。你知道吗

from mylib.fun1 import funA
from mylib.fun2 import funB

但同样,假设我不必只导入funA()funB,我有一大堆除test.py之外的模块,它们也从彼此导入函数。因此,为每个导入指定路径将花费大量时间(像这样进行的导入超过200个)。你知道吗

除了为所有导入指定整个路径之外,还有没有更干净的方法来进行这些导入?你知道吗

我试着在我的__init__.py上进行这些导入,但是由于我的经验不足,我仍然无法使它工作。你知道吗

文件

风趣1.py

def funA():
    return True

风趣2.py

from fun1 import funA

def funB():
    return True

你知道吗测试.py你知道吗

from fun1 import funA
from fun2 import funB

Tags: 模块项目函数frompytestimport路径
3条回答

根据我的理解,您正在尝试导入位于其他项目位置的模块。尝试此操作,并将path替换为要从中导入模块的位置。你知道吗

sys.path.insert(0, path)

如果我误解了你的问题,请告诉我。你知道吗

如果我理解正确,您希望在mylib之外有一个

from mylib import funA

首先,在mylib中似乎到处都需要相对导入。第二,您需要使用您的uuu init\uuuuy.py从本地目录导入所有内容,并使其在上面的目录中可用。我将更改(最少)您的文件如下,添加更多的文件来测试导入。你知道吗

目录结构:

.
├── mylib
│   ├── fun1.py
│   ├── fun2.py
│   ├── __init__.py
│   └── test.py
├── scriptA.py
├── scriptB.py
└── script_test.py

风趣2.py

from .fun1 import funA

def funB():
    return True

__初始值

from .fun1 import funA
from .fun2 import funB

你知道吗测试.py你知道吗

from . import funA, funB

你知道吗脚本a.py你知道吗

from mylib import funA

你知道吗脚本b.py你知道吗

from mylib import funB

脚本_测试.py你知道吗

from mylib import test

test.funA()

现在可以根据需要使用脚本A、脚本B或脚本U测试。当您在每个目录级别继续使用.的相对导入时,此模式扩展到更深层的目录结构。你知道吗

您需要在需要的地方导入模块/函数。python没有神奇的方法知道您已经导入了一些东西。导入所需的模块/函数(https://docs.python.org/3/reference/import.html)有不同的方法,但我发现最有用的方法是导入模块,然后稍后使用带点语法的模块名来调用函数,例如:

from . import func1
from . import func2

def test():
    func1.funA()
    func2.funB()

只是一个例子。但你可以看到一个大致的想法。(from . import func1将从当前目录/模块导入func1)

相关问题 更多 >