博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的import语法替代方案
阅读量:4294 次
发布时间:2019-05-27

本文共 857 字,大约阅读时间需要 2 分钟。

为什么要替换import

  1. 首先,Python导入上级目录的模块是个很麻烦的事,一般要修改sys.path
  2. 其次,Python导入子目录的模块必须添加__init__.py文件,虽然很简单,但是有必要吗,要吗,吗。。。
  3. 习惯了web开发的人对相对路径导入都很熟悉,特别是nodejs实用require方法导入很方便,所以我也写了一个类似的Python require方法,可以模仿nodejs的require方法。

怎么实现的

其实实现的方法还是比较简单的,Python内置了一个模块导入方法__import__,但是它并不能按文件名来导入,而是按照类似import语法的方法来导入,比如__import__('a/b')会报一个错误:

>>> __import__('a/b')Traceback (most recent call last):  File "
", line 1, in
ImportError: Import by filename is not supported.

但是__import__对于同级目录的模块导入是没有问题的。

所以我的工作就是对工作路径的处理。具体步骤就是:
1. 保存当前工作路径
2. 获取目标模块的上级目录,并且切换当前目录到该目录
3. 导入模块
4. 切换回原来的工作目录
注意
导入模块的时候要修改sys.path,加入当前目录,不然importer会按以前的导入优先级导入

大家有兴趣可以去github上看看,欢迎批评指正,请移步

使用方法

具体使用方法类似于nodejs,有两点需要注意

1. 启动文件中必须from require import *或者import require,其他文件中就可以直接使用了。
2. 导入时不用写文件后缀,比如require('lib/modA')这样就可以了。
3. 实现from modA import *功能的写法require('modA', globals())

转载地址:http://ttuws.baihongyu.com/

你可能感兴趣的文章
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>