我有以下包结构:
.
└── package
├── __init__.py
├── sub_package_1
│ ├── __init__.py
│ └── main_module.py
├── sub_package_2
│ ├── __init__.py
│ └── some_module.py
└── sub_package_3
├── __init__.py
└── some_module.py
在package/sub_package_1/main_module.py
我想同时使用package/sub_package_2/some_module.py
和package/sub_package_3/some_module.py
。为此,我想使用intra-package reference。我知道我可以使用from ..sub_package_1 import some-module
但由于名称相似,我想使用sub_package_1.some_module
这样的点缀语法。
使用from .. import sub_package_2
我显然无法访问sub_package_2.some_module
,因为sub_package_2
是一个包。但是我发现使用
from .. import sub_package_2
from ..sub_package_2 import some_module
我可以访问sub_package_2.some_module
。显然,第二次导入会将some_module
添加到sub_package_2
(检查dir(sub_package_2)
)。
我的问题是:
import package
后跟from package import module
将module
添加到package
? Python实际上在这做什么?答案 0 :(得分:0)
1
在sub_package_2的文件__init__.py
中编写
from . import some_module
在main_module.py
中你必须写
from .. import sub_package_2
代码sub_package_2.some_module
现在应该可以使用
2
"如何在python工作中导入"你可以在这里阅读更多Importing Python Modules
from .. import sub_package_2
在当前命名空间中创建对sub_package_2
的引用。包sub_package_2
现在就像一个模块,在文件__init__.py
中定义。如果你在__init__.py
中没有写任何内容,则sub_package_2不会知道some_modue
from ..sub_package_2 import some_module
创建对名为 some_module 的包some_module
的模块sub_package_2
的引用。它类似于some_module = sub_package_2.some_module
。您看到:some_module
中也有对sub_package_2
的引用。现在sub_package_2
知道模块some_module
重要提示:您可以使用sub_package_2.some_module
,但只有some_module
也会有效。在进口2次后它们是相同的。
如果你写在__init__.py
:
from . import some_module
some_module
自动属于sub_package_2
对于类似的模块名称,您可以使用as
from ..sub_package_1 import some_module as some_module_1
from ..sub_package_2 import some_module as some_module_2
from ..sub_package_3 import some_module as some_module_3