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

119 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课导入模块详解
### 哪儿导入我们的模块?
> [!question]
>
> 编写好模块之后我们可以把模块放在哪里供我们的其他py程序导入和使用
我们通常有两种方式:
* 使用环境变量
* 从默认模块加载路径导入
#### 使用环境变量
这种方式我不太用,说的是可以在系统环境变量中,添加一个名为`PYTHONPATH`的环境变量,这个变量的值支持多个路径值,可以支持在多个路径寻找。比如我们可以设置`d:\test`进去试一试。如果加入`用户变量`则只对当前用于生效,如果加入`系统变量`则可以对所有用户生效。`系统变量`的查找优先顺序大于`用户变量`
#### 从默认模块加载路径导入
我们可以通过`sys.path`查看模块的默认导入路径有哪些。
```python
# coding:utf-8
import sys, pprint
# pprint可以替代print函数在需要输出的内容较多时可以更友好的显示打印结果
pprint.pprint(sys.path)
```
> [!tip]
>
> 可以看到,默认都会从我们的脚本所在的同一个目录导入,多数时候,我们放在同一个目录下是最方便的。
同时也会有些python的安装目录等。
在这里我们需要注意到一个目录今后我们安装一些三方库的时候通常都是会安装到python安装目录下的`lib\site-packages`目录下的因此如果你需要将自己写的模块放到一个python目录下通常可以放到这个目录下。
你还可以临时性扩展这个列表:
```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`文件如下:
```python
# 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`文件用来测试:
```python
# coding:utf-8
from mymodule import *
print(add_1(1))
print(add_2(1))
print(add_3(1))
```
此时运行它,就会发现报错,会发现`add_3`这个命令找不到。这个变量就实现了它的意义。
> [!question]
>
> 如果定义了这个变量,还是需要使用没在列表里面的成员怎么办呢?
* 可以使用`import 模块名`导入模块,这样是可以访问到的。
* 使用`from 模块名 import 成员名`导入成员,这样也是可以导入的。
具体大家可以试一下哦~
参考例子:
```python
# 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包的复数形式合起来理解为一些三方包吧 |