导入如何在python中运行?

时间:2018-01-04 15:04:01

标签: python import

使用matplotlib.pyplot并不像flask.app那样有效,尽管其包中pyplot.pyapp.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'>
>>> 

自学成才能解决这样的问题。任何想法都表示赞赏。

1 个答案:

答案 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 - 它的工作方式相同)。