如何在Python

时间:2018-03-14 13:20:56

标签: python

道歉,如果这些标题有点令人困惑。

基本上,如果我有一个引用任何其他包的子模块(没有完整的模块引用,即import foo.bar而不是import project.foo.bar)并使用pyreverse生成包图,那么pyreverse不会显示子模块正在使用foo.bar。

例如,如果我有以下包结构

parent/
--__init__.py
--parent_example.py
--sub/
----__init__.py
----sub_example.py

文件sub_example.py包含from parent_example import foo

使用命令pyreverse parent -o png

运行时会生成以下图表

enter image description here

但是,如果使用绝对路径from parent.parent_example import foo导入并运行相同的命令,则会输出您期望的内容

enter image description here

所以我的问题如下 - 如果我从另一个包导入一个模块,我应该使用像例2中的绝对路径(从假设是最顶层包的根) - 在示例中case,父包,或者我应该像第一个例子中那样导入?

我知道这可能被视为征求意见 - 我想澄清一点,我正在寻找python推荐的方式(大多数标准做法,或PEP,如果它存在)来处理进口

干杯

1 个答案:

答案 0 :(得分:1)

“文件sub_example.py包含w

上面甚至不应该与显示的模块位置一起使用。

“但是如果使用绝对路径导入from parent_example import foo

这是一个相对导入,它指定包内的完整绝对路径(即从包的根开始的路径)。 这个表格一切都好。

第一个表格应为

from parent.parent_example import foo

所有这些文件属于(在{}}包内。因此,您可以在from ..parent_example import foo 内的任何模块中指定具有相对导入的导入parentfrom <put.your.path> import some_barfrom <.your.path> import some_bar,依此类推......

是否始终使用完整的相对路径或始终使用部分相对路径是个人选择的问题。

通常省略from <..your.path> import some_bar包的名称是有意义的  因为它不需要,所以你可以在不触及内部代码的情况下更改其名称。

This可能对您有用