虽然使用了init.py,但python模块仍然隐藏

虽然使用了init.py,但python模块仍然隐藏,python,python-import,Python,Python Import,在我的一个项目中,我有一个主目录(比如directory_XYZ),它有4个子目录“config”、“source”、“library”和“modules”。这四个模块都有需要相互通信的python模块。我在所有四个子目录中都放置了空的\uuuu init\uuuu.py。但仍有一些模块彼此隐藏。感谢您的帮助 我在所有子目录下的所有python模块中都这样设置sys路径 lib_path = os.path.abspath('../modules') lib_path1 = os.path.ab

在我的一个项目中,我有一个主目录(比如directory_XYZ),它有4个子目录“config”、“source”、“library”和“modules”。这四个模块都有需要相互通信的python模块。我在所有四个子目录中都放置了空的
\uuuu init\uuuu.py
。但仍有一些模块彼此隐藏。感谢您的帮助

我在所有子目录下的所有python模块中都这样设置sys路径

lib_path = os.path.abspath('../modules')
lib_path1 = os.path.abspath('../source')
lib_path2 = os.path.abspath('../library')
lib_path3 = os.path.abspath('../config')
sys.path.append(lib_path)
sys.path.append(lib_path1)
sys.path.append(lib_path2)
sys.path.append(lib_path3)
当我从“source”子目录下PQR.py的“modules”子目录导入ABC.py时,它是隐藏的

PQR.py具有上面的系统路径代码和下面的导入代码

from ABC import *

我做错了吗?

空白文件需要命名为
\uuuu init\uuuu.py
。试试看,如果仍然不起作用,请留下评论。

首先请注意,暗示指定目录确实是可以导入的包的文件名是
\uu init\uuuuuuuuuuuuuuuuuuuuuuupy
,而不是
init.py
。也就是说,
\uuuuu init\uuuuuuuu.py
,在
.py
后缀之前有两个前导下划线和两个封闭下划线

现在,为了解决您的问题,您所需要做的就是将
XYZ
添加到
sys.path
(如果
XYZ
位于当前目录中,则不需要),并在其下放置一个空的
\uuuu init\uuuuuuy.py
文件。
XYZ
下的四个包还应该包含一个空的
\uuuu init\uuuu.py
文件,正如您所做的那样,但是不需要将它们的路径添加到
sys.path

然后,您将能够通过以下方式从彼此内部访问模块:

from XYZ.modules import <specific-module>
from XYZ.source import <specific-module>
__all__ = ["<specific-module-1>", "<specific-module-2>"]
完成后,只需导入包含
\uuuu init\uuuu.py
文件的包,就可以导入指定的模块。例如,如果
modules
目录包含模块
X
Y
以及定义以下内容的
\uuuuu init\uuuuuu.py
文件:

__all__ = ['X']
然后,XYZ.modules import*中的语句
也会自动导入“X”,并使其在导入模块的命名空间中作为
X
可用

我建议你阅读和阅读。

这也是一个有趣的阅读。

ABC
和XYZ之间的关系是什么?ABC和XYZ是两个不同目录中的不同python模块。XYZ使用ABC中定义的某些函数。因此我需要将ABC导入XYZ。谢谢您的详细回复!但有些事情我不明白。py是python文件,“modules”是它所在的目录。那么它是否应该来自modules.ABC import*?因为我已经在路径中添加了“modules”,并且还有init.py,所以我认为当我执行“来自ABC import*”时,应该能够看到ABC.py及其下的所有函数。我还尝试了“from modules.ABC import*”,但出现错误“ImportError:没有名为modules.ABC的模块”请查看我的更新答案。您应该确认
XYZ
位于
sys.path
中,或者它是您当前的目录。一旦出现这种情况,您应该能够从XYZ.modules import ABC执行
,或从XYZ.modules.ABC import*
执行
。但必须是
\uuuu init\uuuuuuuuuuuy