gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:09:09 24 4
gpt4 key购买 nike

我的项目有以下结构:

.
└── 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 上进行这些导入,但由于我缺乏经验,我仍然无法使其工作。

文件

fun1.py
def funA():
return True

fun2.py
from fun1 import funA

def funB():
return True

测试.py
from fun1 import funA
from fun2 import funB

最佳答案

如果我没理解错的话,你想在 mylib 之外有一个看起来像这样的文件

from mylib import funA

首先,您似乎需要在 mylib 中的所有地方进行相对导入。其次,您需要使用 __init__.py 从本地目录导入所有内容,并使其在上面的目录中可用。我会(最低限度地)更改您的文件如下,添加更多文件来测试导入。

目录结构:

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

fun2.py
from .fun1 import funA

def funB():
return True

__初始化__.py
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 或 _test。当您继续在每个目录级别的 __init__.py 中使用 . 的相对导入时,此模式扩展到更深的目录结构。

关于python - 在项目目录外导入函数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830481/

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