使用matplotlib.pyplot
并不像flask.app
那样有效,尽管其包中pyplot.py
和app.py
的排列相似。这是解释。
flask
包中包含以下模块。
__init__.py
app.py
注意。这些不是烧瓶包含的唯一模块。
每当我想使用app.py
模块时,我都可以通过两种方式完成。他们在这里。
>>> import flask
>>> flask.app
<module 'flask.app' from 'C:\\Python34\\lib\\site-packages\\flask\\app.py'>
>>> from flask import app
>>> app
<module 'flask.app' from 'C:\\Python34\\lib\\site-packages\\flask\\app.py'>
>>>
现在让我们来看看matplotlib
包。
matplotlib
包中包含以下模块。
__init__.py
pyplot.py
注意。这些不是matplotlib
包含的唯一模块。
现在我将使用与flask
相同的方法来使用pyplot.py
模块,但这次第一种方法不起作用,我不明白为什么。在这里。
>>> import matplotlib
>>> matplotlib.pyplot
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
matplotlib.pyplot
AttributeError: 'module' object has no attribute 'pyplot'
>>> from matplotlib import pyplot
>>> pyplot
<module 'matplotlib.pyplot' from 'C:\\Python34\\lib\\site-packages\\matplotlib\\pyplot.py'>
>>>
自学成才能解决这样的问题。任何想法都表示赞赏。
答案 0 :(得分:2)
包的作者可以选择是否使用主包名自动导入的内容。
当然,这些都是复杂的例子,在这些项目源代码中很难找到它,但它归结为一个软件包的根__init__.py
文件触发的代码是否导入明确或不明确的子包。
所以,好像Flask的__init__.py
会包含一行
from flask.app import app
(虽然app可以是直接在__init__
文件中实例化的简单对象,但不一定是另一个子包中的东西)
换句话说:Python不执行自动发现,更不用说&#34;自动导入&#34;子包中的代码。对于您自己的代码,通过在根__init__
文件中显式导入(例如,我的小&#34;上的__init__.py
)来公开所有子包和公共可用类可能会很好。 extradict&#34;项目是这样的:
# coding:utf-8
from .version_dict import VersionDict
from .version_dict import OrderedVersionDict
from .normalized_dict import FallbackNormalizedDict
from .normalized_dict import NormalizedDict
from .map_getter import MapGetter
from .reciprocal_dict import BijectiveDict
from .extratuple import namedtuple
from .extratuple import defaultnamedtuple
from .extratuple import fastnamedtuple
__author__ = "João S. O. Bueno"
__version__ = "0.3.1"
这使得所有这些课程和工厂可以直接供任何人进口&#34; extradict&#34;。
如果特定的子包在初始化或使用的内存方面很昂贵,最好不要显式导入它,只是让用户明确地这样做。例如,&#34; pygame&#34;,一个广泛使用的项目,为2D图形和实时键盘和鼠标事件处理提供简单的多媒体访问,除其他外,预先自动导入其大部分子模块,但不是处理电脑摄像头的模块 - 所以必须这样做:
import pygame
import pygame.camera
在项目中使用网络摄像头。 (或from pygame import camera
- 它的工作方式相同)。