美文网首页
python模块导入

python模块导入

作者: GGBond_8488 | 来源:发表于2021-06-07 11:10 被阅读0次

最近遇到了很多关于python模块导入的问题,这里记录一下

一个 module 内的 Python 代码通过 importing 操作就能够访问另一个模块内的代码。 import 语句是发起调用导入机制的最常用方式,但不是唯一的方式。 importlib.import_module() 以及内置的 __import__() 等函数也可以被用来发起调用导入机制。

关键字

使用all = ['','']

name

name 是一个全局变量,代表模块的名字,即命名空间。

Python有一个经典的判断语句 if name == main:,当Python文件被当做脚本直接执行时,name变量的值会变为main,从而使该判断语句成立,并执行该语句下的其他代码; 而当Python文件被当做模块/包导入时,它的值表示的是模块名.

import

import关键字是Python中用来导包的,常见的import语句有四种:
1.import module: 这种形式会导入module下所有文件,如果module下有很多模块,而你并没有全部用到,显然会浪费很多内存(加载代码)。

2.from module import sub_module/func:这种形式是导入module下的某个子模块,或者定义的某个函数,因为只是导入我们需要的模块,所以并不会像第一种方式很浪费内存,也推荐这种方式。

3.from module import sub_module/func as new_module:这种形式与第二种形式差不多,但是可以使用我们自定义的名称,看个人需求。

4.from module import *:这种形式也是导入module下所有文件,不同于第一种,这种不需要加上module前缀。举个例子,比如module下有个test函数,第一种方式是这样的module.test();而第四种方式是这样的test()。

sys.path

一个由字符串组成的列表,用于指定模块的搜索路径。初始化自环境变量 PYTHONPATH,再加上一条与安装有关的默认路径。

sys.path 是一个列表,它的作用是存储Python模块的搜索路径。一般情况下,该变量存储的路径有当前路径,内置模块路径等。

我们经常报模块找不到,很大程度可以通过设置sys.path变量来解决。

命令行参数

在Python的模块导入中,还有两个命令行参数也被多次提到,分别是 -c-m
python -c:传递一个字符串形式的Python程序,并执行

python -c "import sys; print(sys.path)"

python -m:将一个Python模块当成脚本使用,具体可以参见这篇文章

sys.moudles

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。

import()

import(name, globals=None, locals=None, fromlist=(), level=0)

该函数会导入 name 模块,有可能使用给定的 globalslocals 来确定如何在包的上下文中解读名称。 fromlist 给出了应该从由 name 指定的模块导入对象或子模块的名称。 标准实现完全不使用其 locals 参数,而仅使用 globals 参数来确定 import 语句的包上下文。
level 指定是使用绝对还是相对导入。 0 (默认值) 意味着仅执行绝对导入。 level 为正数值表示相对于模块调用 __import__() 的目录,将要搜索的父目录层数 (详情参见 PEP 328)。
name 变量的形式为 package.module 时,通常将会返回最高层级的包(第一个点号之前的名称),而 不是name 命名的模块。 但是,当给出了非空的 fromlist 参数时,则将返回以 name 命名的模块。

importlib.import_module

importlib.import_module(name, package=None)
导入一个模块。参数 name 指定了以绝对或相对导入方式导入什么模块 (比如要么像这样 pkg.mod 或者这样 ..mod)。如果参数 name 使用相对导入的方式来指定,那么那个参数 packages 必须设置为那个包名,这个包名作为解析这个包名的锚点 (比如 import_module('..mod', 'pkg.subpkg') 将会导入 pkg.mod)。

import_module() 函数是一个对 importlib.__import__() 进行简化的包装器。 这意味着该函数的所有主义都来自于 importlib.__import__()。 这两个函数之间最重要的不同点在于 import_module() 返回指定的包或模块 (例如 pkg.mod),而 __import__() 返回最高层级的包或模块 (例如 pkg)。

如果动态导入一个自从解释器开始执行以来被创建的模块(即创建了一个 Python 源代码文件),为了让导入系统知道这个新模块,可能需要调用 invalidate_caches()

在 3.3 版更改: 父包会被自动导入。

相关文章

  • Python import语句导入模块语法

    Python import语句导入模块语法 源文档Python import语句导入模块语法python中的imp...

  • python os 模块(1)

    python中导入模块用 import import os #导入os 模块...

  • 浅谈 Python 的模块导入

    浅谈 Python 的模块导入 本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句...

  • python重新导入模块

    重新加载模块 倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为...

  • 模块和包的创建与导入

    一、模块 在python中,模块就是python文件,其后缀为.py。我们通过import语句来导入模块或者导入模...

  • Python 重新加载模块的方法你知道吗

    为防止两个模块互相导入 Python默认所有的模块都只导入一次,如果需要重新导入模块, Python2.7可以直接...

  • Python 导入Import模块和包

    任何语言使用已封装好的模块(或库)都要先进行导入,Python使用import关键字导入模块。 如何导入 导入模块...

  • Python——MySQLdb

    在windows上安装python mysql模块后,导入模块时报 python ImportError: DLL...

  • django分页功能详解

    python shell模式下导入django下的Paginator模块 python shell模式下导入需要展...

  • 17-python之导入模块

    要使用一个模块,我们必须首先导入该模块。Python使用import语句导入一个模块。例如,导入系统自带的模块ma...

网友评论

      本文标题:python模块导入

      本文链接:https://www.haomeiwen.com/subject/kmxleltx.html