记录下:python 的 sys.path.append()
当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中:
>>> import sys
>>> sys.path
['', 'C:\\Python352\\Lib\\idlelib', 'C:\\Python352\\python35.zip', 'C:\\Python352\\DLLs', 'C:\\Python352\\lib', 'C:\\Python352', 'C:\\Python352\\lib\\site-packages', 'C:\\Python352\\lib\\site-packages\\setuptools-28.6.1-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\pip-8.1.2-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\requests-2.11.1-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\xlutils-2.0.0-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\xlwt-1.1.2-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\pymongo-3.3.1-py3.5-win-amd64.egg', 'C:\\Python352\\lib\\site-packages\\pytz-2016.7-py3.5.egg', 'C:\\Python352\\lib\\site-packages\\zope.interface-4.3.3-py3.5-win-amd64.egg']
sys.path 返回的是一个列表!
该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;
对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append('xxx'):
import sys
sys.path.append(’引用模块的地址')
这种方法是运行时修改,脚本运行后就会失效的。
另外一种方法是:
把路径添加到系统的环境变量,或把该路径的文件夹放进已经添加到系统环境变量的路径内。环境变量的内容会自动添加到模块搜索路径中。
原文:http://www.tuicool.com/articles/EB3miqr
sys模块包含了与python解释器和它的环境有关的函数,这个你可以通过dir(sys)来查看他里面的方法和成员属性。
下面的两个方法可以将模块路径加到当前模块扫描的路径里:
sys.path.append('你的模块的名称')。
sys.path.insert(0,'模块的名称')
永久添加路径到sys.path中,方式有三,如下:
1)将写好的py文件放到 已经添加到系统环境变量的 目录下 ;
2) 在 /usr/lib/python2.6/site-packages 下面新建一个.pth 文件(以pth作为后缀名)
将模块的路径写进去,一行一个路径,如: vim pythonmodule.pth
/home/liu/shell/config
/home/liu/shell/base
3) 使用PYTHONPATH环境变量
export PYTHONPATH=$PYTHONPATH:/home/liu/shell/config
————————————————
版权声明:本文为CSDN博主「oOo右右」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jojoy_tester/article/details/54575264
在学习Python的过程中,import是较早接触的一个关键字,Python有很多的内置库,使用import导入后即可使用,或者通过pip安装后import使用,import还为我们组织项目结构提供了可能,在开发大型系统时,整个项目有很多的文件夹和文件,都是通过import来进行连接的,所以搞清楚import的工作机制很有必要。
一、import的基本用法
1.导入包名
import os
2.从包中导入函数
from math import pow
3.导入包并赋予别名
import math as m
4.从包中导入常量并赋予别名
from math import pi as p
5.导入包中所有内容
from math import *
二、Python组织代码的方式
1.一个文件中的元素
如果整个程序只有一个文件,这个文件中就有变量、函数、类这些元素可供操作。
2.模块(module)
简单来说模块就是一个.py文件,例如:在同一个路径下有a.py和b.py两个文件,那么在a.py中就可以import b,然后通过b.xxx就可以使用b.py中的变量、函数、类。
3.包(package)
简单理解包就是包含一个__init__.py的文件夹,例如:在同一个路径下有一个a.py文件和一个b文件夹,在b文件夹中有一个__init__.py文件,在a中import b就是导入了b这个包,实际上就是__init__.py这个文件。
4.__all__
在包的__init__.py中定义的__all__变量,这样就可以通过导入包名来调用包内各文件中的元素,例如例如:在同一个路径下有一个a.py文件和一个b文件夹,在b文件夹中有__init__.py和c.py两个文件,
c.py中内容为:
__init__.py的内容为:
a.py的内容为:
运行结果:
程序运行后多了一个__pycache__文件夹,当一个模块第一次被导入时,它就被汇编为字节代码,并将字节码写入一个同名的.pyc文件。后来的导入操作会直接读取.pyc文件而不是.py文件。(除非.py文件的修改日期更新,这种情况会重新生成.pyc文件)
5.为什么用.c来引入?
前面的a.py可以使用import b来导入b.py中的元素,为什么b文件夹中的__init__.py中不能import c呢?因为__init__.py其实代表的是b这个文件夹,c并没有跟它在一级目录下,所以要使用.c来引入c.py中的元素。
6.多层目录怎么import?
看下面一张图就够了:
三、搜索路径
导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录。
不同的环境中sys.path是不一样的,Python会依次去查找列表的路径,找到后就会返回,所以先后顺序很重要,第一个''是指当前目录或指定的相对路径,例如你当前目录中有一个math.py文件,当你import math的时候相当于导入了这个math.py文件,而不是标准库math。
参考资料:
1. https://blog.csdn.net/jojoy_tester/article/details/54575264
2. https://cloud.tencent.com/developer/news/308692