°

python导入模块的运作机制及配置环境变量详解

2019年课程规划及价格说明


PHP实战视频教程大全

在上一文python导入模块详解中我们详细的分析了pytho导入模块的使用方法,本文我们就来深入一下,说说python到底是怎样导入模块的,它的运作机理是怎么样的。

我们还以上文的案例为例讲解,上文中,我们有两个文件:my_module.py和intro.py大家可以打开看看文件内容。我们在intro.py文件中导入了模块my_module.py,我们要说的就是intro.py是通过什么样的机制加载到my_module.py模块的。

首先说一下这两个文件所在的路径为同一目录:/Users/coreyschafer/Demos/Python-Imports

然后我们在intro.py文件中,导入一个新模块,该模块为内置模块:

import sys 系统模块

然后打印该模块的路径属性

print(sys.path)

尝试执行,看看我们得到的结果:

实际上,当我们执行导入模块的操作的时候,python内部会去检测一系列的路径,python所检测的这些路径全都在一个list数组里面,如上图。

可以看到,sys.path得到的是一个list数组,里面的元素是一些文件路径,这些路径就是在我们执行导入模块的时候python去读取文件和目录。

首先第一个元素,很显然就是我们当前被导入的模块文件my_module.py所在的目录

第二个路径是python的路径环境变量

第三个目录是python的标准库文件夹,这就是为什么我们可以直接导入sys模块

接着我们看最后一条,加载的是site-packages,这是一个第三方的包

在上文中,我们通过intro.py导入模块my_module.py,这两个文件是在同一个目录下的,所以我们不需要指定路径,直接写上名称就导入成功了,那么如果这两个文件不在同一个目录中呢?

比如我把my_module.py这个要被导入的模块文件移动到桌面上的My-Modules文件中,那么再按照原来的方式导入模块肯定就会报错,因为找不到这个文件。

报错错误:ModuleNotFoundError: No module named ‘my_module’

解决这个问题的方法有多种:

第一中方法就是在sys.path就是上图的list,在其中追加一个元素,指定要导入的模块文件的路径:

注意,以下代码要在导入模块代码之前。

import sys

sys.path.append(‘/Users/coreyschafer/Desktop/My-Modules’)

看看添加的结果:

可以看到已经添加进入path数组中,这样我们就可以直接导入桌面My-Modules文件加中的模块了,但是这种方法局限性很大,不推荐使用。

第二种方法就是:改变python的环境变量,这个操作在Mac和Windows中的配置方法是不同的

如果是在mac系统中修改python的路径环境变量

首先打开我们的命令行工具,terminal,输入命令:nano ~/.bash_profile

接着到命令行的下方,输入命令:export PYTHONPATH=”/Users/coreyschafer/Desktop/My-Modules”

按快捷键:ctrl+x再按y保存在按回车使路径生效

可以看到已经ok了,可以直接导入桌面上My-Modules文件中的模块了

那么在Windows中怎么设置python的环境变量:

控制面板–》系统–》高级系统设置–》环境变量

新建一个环境变量:

变量名:PYTHONPATH

变量值:C:\Users\Administrator(用户名)\Desktop\My-Modules

依次点击确定,保存环境变量

设置成功了,并且我们尝试导入模块,新的模块已经从桌面的My-Module文件夹中开始导入

打赏
  喜欢