Python的import语法替代方案

为什么要替换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 "<stdin>", line 1, in <module>
ImportError: Import by filename is not supported.

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

大家有兴趣可以去github上看看,欢迎批评指正,请移步https://github.com/xupingmao/require.py

使用方法

具体使用方法类似于nodejs,有两点需要注意
1. 启动文件中必须from require import *或者import require,其他文件中就可以直接使用了。
2. 导入时不用写文件后缀,比如require('lib/modA')这样就可以了。
3. 实现from modA import *功能的写法require('modA', globals())

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值