Python子包引用

2024-06-16 10:34:53 发布

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

我对这个本应是极其简单的问题束手无策。下面是一个简单示例的格式,我编写这个示例是为了解决我的问题。我有一个在__init__.py中的__all__ = ["p1","p2"]的文件夹顶部。然后,我有子文件夹p1和p2,其中都有__init__.py,它们都有__all__,同样用两个简单模块quick1和quick2的名称定义,quick1在p1中,quick2在p2中。如果我从top外部的脚本导入top.p1.quick1,那么导入工作正常。但是,尝试从quick2导入top.p1.quick1会出现错误 File "quick1.py", line 1, in <module> import top.p2.quick2 ImportError: No module named top.p2.quick2 如何从另一个子包导入模块?据我所知,根据python文档,这应该是可以工作的。有人看到我犯的一个明显的、微不足道的错误吗?在

编辑:似乎我需要将带有top的目录添加到我的搜索路径中。我可以通过设置PYTHONPATH来临时执行此操作。但是,有没有更好的方法可以通过distutils脚本来实现这一点呢?在


Tags: 模块py脚本文件夹示例inittop格式
2条回答

你所描述的一切都很好,不会重现错误这里是我能想到的最简单的版本:

$ mkdir /tmp/path
$ mkdir /tmp/path/top /tmp/path/top/p1 /tmp/path/top/p2
$ touch /tmp/path/top/__init__.py /tmp/path/top/p1/__init__.py /tmp/path/top/p2/__init__.py
$ touch /tmp/path/top/p1/quick1.py /tmp/path/top/p2/quick2.py$ echo 'import top.p1.quick1' > /tmp/path/top/p2/quick2.py
$ PYTHONPATH=/tmp/path python /tmp/path/top/p2/quick2.py
$ python -c 'import sys; sys.path.append("/tmp/path"); import top.p2.quick2'

它运行得很好。除非您使用的不是from ... import *,否则__all__是不相关的(而且您不应该这样做)。只要top(这里,/tmp/path)的父目录在sys.path上,一切都会好起来;如果父目录不在那里,您将得到一个错误。在

那么,为了重现您观察到的错误,您可以对这些操作序列进行什么最小的更改?在

你的问题是你的顶级套餐不在搜索路径. 在

相关问题 更多 >