繁体   English   中英

导入如何在python中工作?

[英]How does import works in python?

尽管pyplot.pyapp.py在其程序包中的排列方式相似,但是使用matplotlib.pyplot不同于flask.app不能正常工作。 这是解释。

flask包装包含以下模块。

__init__.py
app.py

注意。 这些不是flask包含的唯一模块。

每当我想使用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'>
>>> 

自我学习无法帮助您解决此类问题。 任何想法表示赞赏。

由软件包的作者决定是否使用主软件包名称自动导入哪些内容。

当然,这些是复杂的示例,在这些项目的源代码中很难找到它,但是归结为一个包的根__init__.py文件触发的代码是否显式导入了子包。

因此,就好像Flask的__init__.py将包含如下一行

from flask.app import app

(尽管app可以是直接在__init__文件中实例化的简单对象,而不必在另一个子包中进行实例化)

换句话说:Python不执行自动发现,更不用说子包中的代码“自动导入”。 对于您自己的代码,最好公开所有子包和公共可用的类,方法是在根__init__文件中显式导入,例如,在我的小型“ extradict”项目上的__init__.py如下所示:

# 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"

这样,所有导入“ extradict”的人都可以直接使用所有这些类和工厂。

如果特定的子包在初始化或使用的内存方面很昂贵,则最好不要显式导入它,而应让用户显式地进行导入。 例如,“ pygame”是一个广泛使用的项目,可为2D图形以及实时键盘和鼠标事件处理提供便捷的多媒体访问,此外,它会自动自动导入其大部分子模块,但不会自动导入处理该模块的子模块。电脑摄影机-因此必须要做的事:

import pygame
import pygame.camera 

在项目中使用网络摄像头。 (或者from pygame import camera -它的作用相同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM