我有一个包含以下包结构的Python回购:
inttools/
├── LICENSE
├── README.md
├── __init__.py
├── complex
│ ├── __init__.py
│ └── complex.py
├── divisors
│ ├── __init__.py
│ └── divisors.py
├── primes
│ ├── __init__.py
│ └── primes.py
├── sequences
│ ├── __init__.py
│ ├── champernowne.py
│ ├── collatz.py
│ ├── general.py
│ └── ulam.py
├── special_numbers
│ ├── __init__.py
│ ├── hilbert.py
│ └── polygonal.py
├── special_sets
│ ├── __init__.py
│ ├── cyclic.py
│ └── polygonal.py
└── utils
├── __init__.py
└── utils.py
在每个子包__init__.py
中,我使用from .<submodule name> import *
导入子模块名称,例如在utils.__init__.py
我们有
from .utils import *
现在在主程序包inttools.__init__.py
中我按以下方式导入所有子包子模块名称:
from utils import *
from primes import *
...
...
这个想法是,当导入inttools
包时,包名称空间中的所有子包子模块名称都可用,但是这会失败。例如,在iPython中我cd
到intttools
所在的目录(/Users/srm/dev
)并执行以下操作。
ImportError Traceback (most recent call last)
<ipython-input-1-52c9cc3419fb> in <module>()
----> 1 import inttools
/Users/srm/dev/inttools/__init__.py in <module>()
----> 1 from utils import *
2 from primes import *
3 from divisors import *
4 from complex import *
5 from sequences import *
ImportError: No module named 'utils'
答案 0 :(得分:1)
包是inttools
,因此子包是inttools.utils
,inttools.primes
等。
您可以在__init__.py
或相对路径(.utils
,.primes
等中使用此绝对路径。)