我有这样的包结构:
A/__init__.py
|
--B/__init__.py
|
--C/__init__.py
在每个包和子包中,它包含一些类,例如A/__init__.py
包含A1和A2类,B/__init__.py
包含B1和B2类,C/__init__.py
包含C1和C2类。在A/__init__.py
中,它将A及其子包的所有类名添加到__all__
中。
现在,我想要打印出所有包名以及它们包含的类名,例如
A含有A1,A2,B含有B1,B2,C含有C1,C2
因此给出了包A的绝对路径,例如'xx / yy / A',我该如何打印上面的一行?
我的问题不是如何检索包的文件路径。
答案 0 :(得分:2)
print(os.path.dirname(os.path.abspath(A.__file__)))
或者你有什么不同的想法吗?
<强>更新强>:
如果尚未导入包A,我如何使用
A.__file__
来引用它?
可以说,没有简单的方式可以知道。你可以通过查看import mechanism does的内容来找出它,然后找到一个名为A
的文件夹/文件。
我只知道这个包的绝对文件夹路径。
但这听起来好像你已经知道磁盘上磁盘包的位置而你想要导入它,即使它没有安装as a package。 可以做类似的事情,但你不应该这样做。
答案 1 :(得分:0)
我会尝试挖出一些代码,但总的来说:
我没有根据它的绝对路径导入模块的好方法。导入过程的工作方式是导入相对于现有模块的路径,或相对于sys.path中的条目的路径。一个选项可能是强制将包的根添加到sys.path中 - 对于您找到的每个文件,都会计算模块的虚线模块名称。