知行编程网知行编程网  2022-10-14 10:00 知行编程网 隐藏边栏  327 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python怎么引包的相关知识,包括python安装其他包,以及python引用自己的包这些编程知识,希望对大家有参考作用。

python中导入包的三种方式: 1、输入“导入包名”命令导入; 2.输入“从包名导入模块名”命令导入; 3.输入“from package name.module name import member name”进行导入。

如何在python中导入包

包实际上是模块,因此导入模块的相同语法适用于导入包。无论是导入我们的自定义包还是导入从别处下载的第三方包,导入方式可以归结为以下3种方式:

import 包名[.模块名 [as 别名]]

from 包名 import 模块名 [as 别名]

from 包名.模块名 import 成员名 [as 别名]

[] 中的部分是可选部分,可以直接使用或忽略。

注意导入包时会在包目录下生成一个包含__init__.cpython-36.pyc文件的__pycache__文件夹。



1) import 包名[.模块名 [as 别名]]

以my_package包为例,导入module1模块并使用该模块中的成员使用如下代码:

import my_package.module1
my_package.module1.display("http://c.biancheng.net/java/")


运行结果为:

http://c.biancheng.net/java/

可以看出,通过这种语法格式导入包中的指定模块后,在使用模块中的成员(变量、函数、类)时,需要加上“包名.模块名”作为前缀。当然,如果使用 as 给“包名.模块名”起别名,可以使用模块中的方法直接使用别名作为前缀,例如:

import my_package.module1 as module
module.display("http://c.biancheng.net/python/")


程序执行结果为:

http://c.biancheng.net/python/


另外,当直接导入指定包时,程序会自动执行该包所对应文件夹下的 __init__.py 文件中的代码。例如:

import my_package
my_package.module1.display("http://c.biancheng.net/linux_tutorial/")


直接导入包名,并不会将包中所有模块全部导入到程序中,它的作用仅仅是导入并执行包下的 __init__.py 文件,因此,运行该程序,在执行 __init__.py 文件中代码的同时,还会抛出 AttributeError 异常(访问的对象不存在):

http://c.biancheng.net/python/
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\demo.py", line 2, in <module>
    my_package.module1.display("http://c.biancheng.net/linux_tutorial/")
AttributeError: module 'my_package' has no attribute 'module1'


我们知道,包的本质就是模块,导入模块时,当前程序中会包含一个和模块名同名且类型为 module 的变量,导入包也是如此:

import my_package
print(my_package)
print(my_package.__doc__)
print(type(my_package))


运行结果为:

http://c.biancheng.net/python/
<module 'my_package' from 'C:\\Users\\mengma\\Desktop\\my_package\\__init__.py'>
http://c.biancheng.net/


创建第一个 Python 包

<class 'module'>



2) from 包名 import 模块名 [as 别名]

以my_package包中module1模块的导入为例,使用这种语法格式的实现代码如下:

from my_package import module1
module1.display("http://c.biancheng.net/golang/")


运行结果为:

http://c.biancheng.net/python/

http://c.biancheng.net/golang/

可以看到,使用此语法格式导入包中模块后,在使用其成员时不需要带包名前缀,但需要带模块名前缀。

当然,我们也可以使用 as 为导入的指定模块定义别名,例如:from my_package import module1 as modulemodule.display("http://c.biancheng.net/golang/")

此程序的输出结果和上面程序完全相同。

同样,既然包也是模块,那么这种语法格式自然也支持 from 包名 import * 这种写法,它和 import 包名 的作用一样,都只是将该包的 __init__.py 文件导入并执行。



3) from 包名.模块名 import 成员名 [as 别名]

此语法格式用于将“package.module”中的指定成员(变量、函数或类)导入程序。以这种方式导入的变量(函数、类)可以直接使用变量名(函数名、类名)调用,例如:

from my_package.module1 import display
display("http://c.biancheng.net/shell/")


运行结果为:

http://c.biancheng.net/python/
http://c.biancheng.net/shell/


当然,也可以使用 as 为导入的成员起一个别名,例如:

from my_package.module1 import display as dis
dis("http://c.biancheng.net/shell/")


该程序的运行结果和上面相同。

另外,在使用此种语法格式加载指定包的指定模块时,可以使用 * 代替成员名,表示加载该模块下的所有成员。例如:

from my_package.module1 import *
display("http://c.biancheng.net/python")

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享