python中sys.path--学习

本着下定义开头吧:python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常

接着说明下python的两种加载py文件的方式:

  • python xxx.py
  • python -m xxx.py

第一种方式是直接运行方式

第二种方式是把模块当做脚本来启动

可能看起来说的python运行方式和sys.path有点大相径庭,但实际上两种不同方式的运行导致sys.path[0]的值是有差异的

第一种方式:sys.path[0]是当前脚本的运行目录

第二种方式:sys.path[0]是空值字符串,也就是当前执行python的目录

sys.path是一个python搜索模块的路径列表:
 eg、下边的X.py文件中打印出sys.path内容:

import sys
print sys.path

python x.py运行

其中sys.path[0]是 I:\restful_code\tester,对应调用python解释器的脚本所在的目录。 其实就是存放需要运行的代码的路径

python -m x.py运行

什么是python解释器?

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

常见的Python解释器有: CPython IPython   PyPy  Jython   IronPython   

 使用场景:

 在实际开发中,默认包含了当前目录为搜索路径,所以,当前目录下的模块和子模块均可以正常访问。但是若一个模块需要import平级的不同目录的模块,或者上级目录里面的模块,就可以通过修改path来实现

 修改path的两种方法:

方法一:函数添加
这是即时生效的方法,就是在模块里面修改sys.path值,这种方法修改的sys.path作用域只是当前进程,进程结束后就失效了。
个人比较推荐这种方法,比较干净, 避免一些冲突问题。

比如现在的代码目录结构:

/src/configs/config.py
/src/common/Database.py

假如Database.py期望导入config. py,则可以增加上级目录到sys.path列表里面:

parent_path = os.path.dirname(sys.path[0])
if parent_path not in sys.path:
    sys.path.append(parent_path)
import configs.config

方法一:修改环境变量

添加系统环境变量PYTHONPATH,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开。路径会自动加入到sys.path中。

 

 

猜你喜欢

转载自www.cnblogs.com/clarenceyang/p/10650250.html