python3xiaobaike_2020/chapter6/6-3 python3小白课:导入模块详解.md
2025-04-20 23:22:14 +08:00

3.8 KiB
Raw Permalink Blame History

python3小白课导入模块详解

哪儿导入我们的模块?

[!question]

编写好模块之后我们可以把模块放在哪里供我们的其他py程序导入和使用

我们通常有两种方式:

  • 使用环境变量
  • 从默认模块加载路径导入

使用环境变量

这种方式我不太用,说的是可以在系统环境变量中,添加一个名为PYTHONPATH的环境变量,这个变量的值支持多个路径值,可以支持在多个路径寻找。比如我们可以设置d:\test进去试一试。如果加入用户变量则只对当前用于生效,如果加入系统变量则可以对所有用户生效。系统变量的查找优先顺序大于用户变量

从默认模块加载路径导入

我们可以通过sys.path查看模块的默认导入路径有哪些。

# coding:utf-8
import sys, pprint
# pprint可以替代print函数在需要输出的内容较多时可以更友好的显示打印结果
pprint.pprint(sys.path)

Tip

可以看到,默认都会从我们的脚本所在的同一个目录导入,多数时候,我们放在同一个目录下是最方便的。

同时也会有些python的安装目录等。

在这里我们需要注意到一个目录今后我们安装一些三方库的时候通常都是会安装到python安装目录下的lib\site-packages目录下的因此如果你需要将自己写的模块放到一个python目录下通常可以放到这个目录下。

你还可以临时性扩展这个列表:

# coding:utf-8
import sys, pprint
sys.path.append("d:\\test")
pprint.pprint(sys.path)
import mymodule

help(mymodule)
print("*" * 40)
print(mymodule.__doc__)

print(mymodule.add_1(1))

这里可以承接我们之前课时中讲过的已写好的模块来测试。

Tip

这样的添加是临时的运行另外的python脚本程序这个路径就不会再找了也不会影响系统环境变量等也是一个比较推荐的编写方式。


模块的__all__变量

之前我们讲过,使用from 模块名 import *这样的语句会导入模块的所有成员。但有的时候我们不希望我们的每个成员都供外界使用这时我们可以在模块中定义一个__all__变量它是一个列表我们想像外界暴露什么就写进去没写的就不会暴露。

我们尝试定义一个mymodule.py文件如下:

# coding:utf-8
def add_1(num):
    return num + 1
def add_2(num):
    return num + 2
def add_3(num):
    return num + 3

__all__ = ["add_1", "add_2"]

我们再在同一个目录下定义一个test.py文件用来测试:

# coding:utf-8
from mymodule import *
print(add_1(1))
print(add_2(1))
print(add_3(1))

此时运行它,就会发现报错,会发现add_3这个命令找不到。这个变量就实现了它的意义。

[!question]

如果定义了这个变量,还是需要使用没在列表里面的成员怎么办呢?

  • 可以使用import 模块名导入模块,这样是可以访问到的。
  • 使用from 模块名 import 成员名导入成员,这样也是可以导入的。

具体大家可以试一下哦~

参考例子:

# coding:utf-8
from mymodule import add_1, add_2, add_3
print(add_1(1))
print(add_2(1))
print(add_3(1))

单词释义

单词 释义
PYTHONPATH path路径pythonpath在这里是python脚本查找模块的路径
path 路径
lib 通常指程序的一些库文件
site-packages site网站站点packagespackage包的复数形式合起来理解为一些三方包吧