目录

1.创建模块及__init__.py初始化文件

为什么要添加__init__.py文件?

2.__version__参数

2.导入库

 1.from xxx import xxx

Name.py文件写入内容

2.import xxx

__init__.py文件参数

 用Index.py文件导入

3.as别名 


众所周知Python有很多的标准库及第三方库支持的,可以随便使用pip就可以下载出来。也就是,别人把饭菜做好,你想要什么菜自己去打来吃就行了。很多模块也非常强大!当然我们自己也可以定义一个模块或库。本期教程只介绍如何创建模块,后面会教大家如何上传自己制作的第三方库至pypi。实现pip安装


1.创建模块及__init__.py初始化文件

要想调用你的模块文件 ,就得新建一个文件夹,然后再创建一个__init__.py文件如下图所示:

python导入自定义包找不到 python导入自定义模块_初始化

 

python导入自定义包找不到 python导入自定义模块_文件写入_02

 

提示:__init__.py文件是两个_下划线


为什么要添加__init__.py文件?

在Python3中要自定义或导入一个文件夹里的.py文件。就需要__init__.py文件来告诉解释器,这文件夹是一个模块。如果没有添加,将无法导入这个模块(甚至不是一个模块)就会报错。创建了这个文件后,当导入这个文件夹中的模块时,都会先导入__init__.py中的内容及库。__init__.py文件也可以保持为空,这并不影响导入模块。


1.__all__参数

__all__参数是指定模块导入全部内容时,限制可以全部导入那些库。我们可以看一个实例:

我们首先创建一个Hello.py文件,写入内容:

python导入自定义包找不到 python导入自定义模块_python_03

_name_=input("You Name:")
print(_name_)

再创建一个Name.py文件 ,写入内容:

python导入自定义包找不到 python导入自定义模块_python导入自定义包找不到_04

print("You narcissist!")

然后在__init__.py文件写入如下图: 

__all__=["Hello"]
# Hello 代表同文件夹中的Hello.py文件

 再然后在模块文件夹上一个目录新建一个Index.py文件

python导入自定义包找不到 python导入自定义模块_文件写入_05

上方文件夹就是模块,再到Index.py文件写入内容:

from Idle_eggs_hurt import *

输出:

python导入自定义包找不到 python导入自定义模块_python导入自定义包找不到_06

from xxx import *


2.__version__参数

也是在__init__.py文件写上参数:

from . import *
__version__="0.1"

然后Index.py文件导入:

import Idle_eggs_hurt
print(Idle_eggs_hurt.__version__)

python导入自定义包找不到 python导入自定义模块_文件写入_07

这其实是一个自定义的参数我们还可以添加一个__author__参数 


这样__init__.py文件的基本参数就讲完了,我们在这里讲几个特点知识,当导入这个库时,Python会先读取__init__.py文件的内容及函数。并导入进来,因此__init__.py文件不仅仅是可以用来初始化模块,还可以用来写函数或功能!我们看一个案例吧:

在__init__.py文件写入__version__函数:

from . import *

def __version__():
    return "0.1"

用Index.py文件调用 :

import Idle_eggs_hurt
print(Idle_eggs_hurt.__version__())

输出:

 

python导入自定义包找不到 python导入自定义模块_文件写入_08

可以看到,我在__init__.py写了一个__version__()函数。用来输出版本。 


2.导入库

导入库有很多方法,我们可以导入指定模块,或函数,或参数,或全部导入,我将会一一讲解。

 1.from xxx import xxx

这个导入是最基础的导入方法,from来指定要导入的库名,import指定导入参数或函数。我们可以看一个实例:

Name.py文件写入内容

__name__="PYmili"

def name():
    print("My Name is PYmili")
    return "MY Name is PYmili"

用Index.py 文件导入:

from Idle_eggs_hurt import Name
print(Name.__name__)
Name.name()

输出:

python导入自定义包找不到 python导入自定义模块_python导入自定义包找不到_09

我们还可以这样写:

from Idle_eggs_hurt.Name import name
name()

 

python导入自定义包找不到 python导入自定义模块_python导入自定义包找不到_10

 这里是from指定Idle_eggs_hurt库中的Name模块,然后导入Name模块中的name函数

这样就简单明了的表达出来了,from xxx import xxx 可以导入库中的任何参数或模块


2.import xxx

import 导入方法也可以导入函数或参数,我们看个实例:

现在模块中有两个文件应该是Hello.py,一个是Name.py

__init__.py文件参数

from . import *

 用Index.py文件导入

import Idle_eggs_hurt.Name as n
print(n.__name__)

输出:

python导入自定义包找不到 python导入自定义模块_后端_11


3.as别名 

在我们导入模块的时候,模块的名字太长了,要用这个模块简直就是增加麻烦,那该怎么解决呢?用别名 as

import Idle_eggs_hurt.Name as n
print(n.__name__)