python3_模块

模块


module也是对象, 通过module名访问模块中的属性(包的属性放在包下的__init__.py文件中), 私有属性也可以访问到

可以通过module.__dict__dir(module), dir() 查看当前模块名词空间,即module的所有属性
普通目录Directory和Package区别,就是Package下有一个__init__.py
package 也是模块, 在init.py中定义属性,只是表达一种层级关系(hierarchy),父子模块通过相对路径可以互相访问到
载入子模块一定会载入父模块, 载入父模块一定不会载入子模块, 导入模块会被顺序执行

sys.modules -> 系统已加载模块的字典
sys.path -> 导入模块的搜索顺序, 返回list, 只搜索目录中文件,不会递归搜索, 先当前包目录, 再当前项目目录, 标准库, 第三方库

模块的特殊属性:
__file__ | 源文件路径
__cached__ | 编译后的字节码文件路径
__spec__ | 模块的规范,规格,specification,
__name__ | 模块名
__package__ | 模块所属的包名

import os.path
path模块: Instead of importing this module directly, import os and refer to this module as os.path.

各种模块导入形式:

  • from mod import mod1 as m 名词空间只增加m
  • from mod.mod1 import attribute/mod2 添加单个成员或mod, 名词空间只添加import后的成员标识符, 标识符查找属性优先,找不到再找mod 推荐使用
  • import mod.mod1.mod2 名词空间添加顶层mod标识符, mod1和mod2都可以通过.的方式访问到
  • import mod.mod1 as m 只有as后的标识符放入名词空间,绑定import后的整体
  • from mod.mod1 import * mod1(mod.py文件或__init__.py文件)所有非下滑线开头属性,包括mod1中导入的模块的标识符, 都加入当前名词空间
    在module中定义__all__={‘x’,’os’}属性, 指定使用用*号导出时, 所导出的所有属性名
    使用__all__

import时,module只会载入(初始化)一次,__init__.py只会执行一次
模块被import时, 会顺序执行, 和作为__main__模块执行, 名词空间有区别
如果一个模块是一个包,就存在import语句中载入自己的情况
如果一个包被import执行时,import到自己下面的包(分为import mod.和from mod.), 名词空间就在原有逻辑上增加一个自己.后的下一个模块

相对导入 ., .., ...,

只能在包内使用,且只能用在from语句中
包内能用相对路径导入就用相对路径导入
如果一个包被import执行时,import到自己下面的包(只在import mod.),并且使用as子句,就会报错 X?

执行模块的__name__被改成__main__, 相对导入的起始模块就是__name__名的模块,所以存在相对导入的模块,作为主模块执行时会报导入错误(导入前将__name__修改,就不会了)

使用if __name__ == __main__: 当模块作为主模块是才执行的代码

插件化开发, 动态载入模块

mod = __import__('sys')  # 等价于import sys as mod  # not for general use
importlib.import_module(name, package=None) # encourage use
`package`设置相对路径起始位置

打包分发

distribution
Pypi(Python Package Index),公共模块存贮中心,http://pypi.python.org/pypi
distutils
setuptools
pip
wheel 可以让python以二进制形式安装,而不需要本地编译
使用setup.py打包

#!/usr/bin/env python
# from setuptools import setup  #wheel
from distutils.core import setup

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='[email protected]',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
      data_files=['file_pathname',...] # 批量导入 glob.glob('path/*.html') 
     )

python setup.py –help
python setup.py build 生成
python setup.py install 安装
python setup.py sdist –> 源码zip文件 ,解压可以用setup.py install安装,也可以pip install zip文件
python steup.py sdist –help-formats 查看所有支持的打包格式
python setup.py bdist_wininst 制作windows下的分发包,二进制
python setup.py bdist_rpm 打包成rpm,二进制
python setup.py bdist_wheel 打包成whl,二进制

猜你喜欢

转载自blog.csdn.net/qq_33287645/article/details/81417274
今日推荐