gpt4 book ai didi

Python 看不到我的子包

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:53 26 4
gpt4 key购买 nike

为什么我要使用它们必须导入所有子包?
我将用一个例子来解释我自己:

In [1]: import cime

In [2]: cime.runners
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/miki/testit/<ipython-input-2-35e09c66121a> in <module>()
----> 1 cime.runners

AttributeError: 'module' object has no attribute 'runners'

In [3]: import cime.runners

In [4]: cime.runners
Out[4]: <module 'cime.runners' from '/home/miki/testit/venv/lib/python2.7/site-packages/cime/runners/__init__.pyc'>

如您所见,它是一个常规的 Python 包:

In [5]: cime.__file__
Out[5]: '/home/miki/testit/venv/lib/python2.7/site-packages/cime/__init__.pyc'

In [6]: ls /home/miki/testit/venv/lib/python2.7/site-packages/cime
download.py __init__.py log.py runners/ run.pyc utils.pyc
download.pyc __init__.pyc log.pyc run.py utils.py

但这不会发生在内置模块上。为什么?

In [7]: import os  # instead of import os.path

In [8]: os.path
Out[8]: <module 'posixpath' from '/home/miki/testit/venv/lib/python2.7/posixpath.pyc'>

谢谢,
魔方

附言我在 virtualenv 中,但我不知道这是否重要。

最佳答案

这是 cime(不管是什么)开发人员的设计决定。一个包不会神奇地导入它的所有子包。这是一件好事,因为否则像 SciPy 这样的大型包将永远需要导入(就像 NLTK 那样)。

一些包,如 os.path、NumPy 和 NLTK 将导入子模块,但它们会明确地这样做。如果您希望这发生在您自己的模块中,请执行

# __init__.py
import .submodule

关于Python 看不到我的子包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com