虽然使用了init.py,但python模块仍然隐藏
在我的一个项目中,我有一个主目录(比如directory_XYZ),它有4个子目录“config”、“source”、“library”和“modules”。这四个模块都有需要相互通信的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
\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