gpt4 book ai didi

Python 子模块内部引用——它们真的很疯狂吗?

转载 作者:行者123 更新时间:2023-11-28 17:54:13 25 4
gpt4 key购买 nike

对新手问题表示歉意。我无法理解这个问题,文档也没有帮助!

考虑以下目录结构:

spam.py
foo / __init__.py
ham.py
eggs.py

使用以下代码:

# __init__.py
# blank

# ham.py
print( "got ham!" )

# eggs.py
print( "got eggs, importing ham!" )
import foo.ham

现在,如果我在 spam.py (!) 中 import foo.eggs (!),就会发生正确的事情,所有模块引用都会起作用。

但是

如果我尝试直接执行 eggs.py,我会得到一个 ImportError: No module named foo.ham!如果我将 foo.ham 导入更改为仅 ham,正确的事情就会发生......但是我无法 import foo.eggs !

那么,我该如何开发eggs呢?如果我使用“无点”引用,我可以很好地开发,但不能尝试,因为我不能 import 模块!如果我使用完整的 foo.ham 引用,我可以导入包,但不能执行用于开发目的的子模块!

这只是 Python 打包架构的一个小故障吗?我做错了吗?

最佳答案

这似乎可行:这是目录结构:

~/test/kl% ls -R
.:
foo spam.py

./foo:
eggs.py eggs.pyc ham.py ham.pyc __init__.py __init__.pyc

文件内容如下:

~/test/kl% cat spam.py 
import foo.eggs

~/test/kl% cd foo/
~/test/kl/foo% cat eggs.py
print( "got eggs, importing ham!" )
import ham

我们可以从 spam.py 和 foo/eggs.py 导入 ham:

~/test/kl% python spam.py 
got eggs, importing ham!
got ham!

要记住的一个有用规则是,当您说 python script.py 时,包含 script.py 的目录将添加到 sys.path 的开头,搜索模块的目录。这就是为什么 python spam.py 无需更改 PYTHONPATH 即可工作。

~/test/kl% python foo/eggs.py
got eggs, importing ham!
got ham!

这里,~/test/kl/foo 被添加到 sys.path。没关系,因为 eggs.py 试图 import ham。由于 ham.py 位于 ~/test/kl/foo 中,它位于 sys.path 中,Python 发现它很好。

~/test/kl% cd foo
~/test/kl/foo% python eggs.py
got eggs, importing ham!
got ham!

目录 ~/test/kl 不在我的 PYTHONPATH 中。

关于Python 子模块内部引用——它们真的很疯狂吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3414901/

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