from浅谈_引入包模块
from浅谈
一、三类引入
自定义,第三方,内置,分别所在python位置。第三方一般默认安装在sitepackage中,内置在lib文件夹。
导入规则,主线为sys.path列表,从前到后导入。
1)一般第一个为py运行程序的本级目录
2)注意 使用某些编译软件会自动添加进上一级目录,但是在cmd中import上一级的模块或包时就会报错,所以建议不使用软件默认添加的目录。
3)因为是从前到后顺序搜索,就要求程序中 一不能有与内置或第三方模块重名的命名。二不能与其他自定义模块重名的命名,因为在引用时会先调用本级目录中的模块,导致误以为调用的是已经定义好的模块最后可能报错。“”module xxx has no attribute xxx
二、导入的语法规则
模块 只能是py文件
包 为包含__init__.py文件的文件目录,可以包含子包。
1)不能引入不带有__init__.py的文件夹
#e1为文件夹,e2func为文件
from e1 import e2func
e2func.func()
>>>
Traceback (most recent call last):
File "C:\Python27\c1.py", line 3, in <module>
from e1 import e2func
ImportError: No module named e1
>>>
2)文件夹中带有 __init__.py主要是为了避免将文件夹名当作普通的字符串。
另一个应用为
package_a ├── __init__.py ├── module_a1.py └── module_a2.py package_b ├── __init__.py ├── module_b1.py └── module_b2.py main.py
- 如果
main.py想要引用packagea中的模块modulea1,可以使用:
from package_a import module_a1 import package_a.module_a1
- 如果
packagea中的modulea1需要引用packageb,那么默认情况下,python是找不到packageb。我们可以使用sys.path.append('../'),可以在packagea中的__init__.py添加这句话,然后该包下得所有module都添加*import __init_即可。
总结:1)from import 的必须是模块 包 函数或类
2)全文中import 模块只导入一次。 而且先执行其中的表达式,然后是被引用的函数。
3)sys.path的初始值来自于以下地方:
包含脚本当前的路径,当前路径
PYTHONPATH 可能就是path中的环境变量 先添加系统环境变量 PYTHONPATH 然后将路径添加。
默认安装路径
动态添加的方法:
import sys import os print sys.path workpath = os.path.dirname(os.path.abspath(sys.argv[0])) sys.path.insert(0, os.path.join(workpath, 'modules')) print sys.path
参考文章:
浙公网安备 33010602011771号