Python sys.path.append() 和 from ... import

记录下: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这个文件。

 

Python sys.path.append() 和 from ... import_第1张图片

4.__all__

在包的__init__.py中定义的__all__变量,这样就可以通过导入包名来调用包内各文件中的元素,例如例如:在同一个路径下有一个a.py文件和一个b文件夹,在b文件夹中有__init__.py和c.py两个文件,

 

Python sys.path.append() 和 from ... import_第2张图片

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?

看下面一张图就够了:

 

Python sys.path.append() 和 from ... import_第3张图片

三、搜索路径

导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录。

不同的环境中sys.path是不一样的,Python会依次去查找列表的路径,找到后就会返回,所以先后顺序很重要,第一个''是指当前目录或指定的相对路径,例如你当前目录中有一个math.py文件,当你import math的时候相当于导入了这个math.py文件,而不是标准库math。

  • 发表于: 2018-09-04
  • 原文链接:https://kuaibao.qq.com/s/20180904G1J5J400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

参考资料:

1. https://blog.csdn.net/jojoy_tester/article/details/54575264

2. https://cloud.tencent.com/developer/news/308692

你可能感兴趣的:(Python)