python的sys.path(环境变量)简单总结

基本概念

sys.path指定用于模块搜索路径的字符串列表。

它根据环境变量PYTHONPATH进行初始化,再加上安装时的默认值。

>>> sys.path

[”, ‘/opt/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/SOAPpy-0.12.22-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/defusedxml-0.4.1-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/wstools-0.4.3-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/docutils-0.12-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/suds-0.4-py2.7.egg’, ‘/opt/lib/python27.zip’, ‘/opt/lib/python2.7’, ‘/opt/lib/python2.7/plat-linux2’, ‘/opt/lib/python2.7/lib-tk’, ‘/opt/lib/python2.7/lib-old’, ‘/opt/lib/python2.7/lib-dynload’, ‘/opt/lib/python2.7/site-packages’]

此列表的第一项path[0],在程序启动时初始化,是包含调用Python解释器的脚本的目录。

如果脚本目录不可用(例如,解释器以交互方式调用或脚本是从标准输入读取),path[0]是空字符串,表示Python首先搜索当前目录中的模块。

注意脚本的目录在依据PYTHONPATH生成的结果之前插入。

 

 

修改path:

一个程序可以根据它自己的目的自由地修改paht列表。

场景:在实际开发中,默认包含了当前目录为搜索路径,所以,当前目录下的模块和子模块均可以正常访问。

但是若一个模块需要import平级的不同目录的模块,或者上级目录里面的模块,就可以通过修改path来实现。

修改path常用两种方法: 

1. 即时生效的方法,就是在模块里面修改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

 最好加个判断,避免重复加入。

2. 在site-packages/ 增加路径,这种方法一劳永逸, 简单暴力。

举个例子,将/tmp/增加到sys.path 首先cd到指定python的sit-packages/目录下,然后创建一个文件,例如test.pth,在文件中增加/tmp/路径信息,保存退出。

[
root@localhost ~]# cat /opt/lib/python2.7/site-packages/test.pth 

/tmp/ [
root@localhost site-packages]# /opt/bin/python

Python 2.7.3 (default, Jul 14 2015, 06:27:34) 

>>> import sys

>>> sys.path

[”, ‘/opt/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/SOAPpy-0.12.22-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/defusedxml-0.4.1-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/wstools-0.4.3-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/docutils-0.12-py2.7.egg’, ‘/opt/lib/python2.7/site-packages/suds-0.4-py2.7.egg’, ‘/opt/lib/python27.zip’, ‘/opt/lib/python2.7’, ‘/opt/lib/python2.7/plat-linux2’, ‘/opt/lib/python2.7/lib-tk’, ‘/opt/lib/python2.7/lib-old’, ‘/opt/lib/python2.7/lib-dynload’, ‘/opt/lib/python2.7/site-packages’, ‘/tmp’]

 

 

    原文作者:python入门
    原文地址: https://my.oschina.net/zhangxu0512/blog/506744
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞