可自动重写的模块和名称空间
fakemod的Python项目详细描述
fakemod
-自动重新加载模块开发库
将Python单元代码放在一个目录中,并立即开始使用它。在
- 使用目录作为自动加载命名空间。在
- 使用文件名作为自动深度重新加载模块。在
- 轻松运行
unittest
案例。在
运行以下操作:
import fakemod
with open('./myfunc.py', 'w') as f:
f.write("""
def add(x, y):
return x + y
""") # create a file with a function
lib = fakemod.at('.') # create a local namespace module
print(lib.myfunc.add(3, 4)) # call the function from myfunc.py
import unittest
class TestMyFunc(unittest.TestCase):
def test_add(self):
self.assertEqual(lib.myfunc.add(3, 4), 7) # create a test
fakemod.runtest(TestMyFunc) # run the test
产生以下输出:
^{pr2}$动机
fakemod
库允许放置助手模块和函数
在一个目录中,并使它们快速可用,如果需要,可以重新加载。
这有助于将现有的笔记本单元格转换为可重用的
库代码。在
在这个过程中,可以很容易地开发这些库函数的测试。在
完成后,不再需要fakemod
。你有一个随时可用的
Python库。包装由你决定。在
示例
直接使用文件:
myfunc = fakemod.at('./myfunc.py')
可以给出相对目录:
lib = fakemod.at('.')
parent = lib['../'] # go up a directory, using []
这和
parent = fakemod.up('.')
顶层模块
您可以将目录或文件注册为顶级模块,然后将其导入。在
fakemod.toplevel('myfunc', './myfunc.py')
import myfunc
myfunc.add(3, 4)
测试
运行单个测试用例方法:
fakemod.runtest(TestMyFunc, 'test_add')
查找并运行模块中的所有unittest.TestCase
类:
fakemod.testmod(mod)
仅在测试文件中运行单个类并退出:
@fakemod.testonly()
class Test(unittest.TestCase):
...
细胞模式
.install
函数将使用当前工作目录
如果__file__
未定义。这在单元模式下很有用
环境。在
here = fakemod.install(globals())
使用__file__
的父目录:
here = fakemod.up(__file__)
假fimport
,假ffrom
fimport
和ffrom
对象可以接受文件系统路径或
带有前导点的类似Python的相对导入。在
要使用伪导入,请从以下位置进行伪输入:
fakemod.install(globals()) # injects fimport, ffrom
fimport('./myfunc.py', as_='myfunc')
myfunc.add(3, 4)
直接导入嵌套名称:
fimport('.myfunc.add')
print(add(3,4))
这和
ffrom('.myfunc', import_='add')
工作原理
.at
,.up
,.install
函数返回FakeModuleType
对象
包装在ModuleProxy
对象中,当
访问其属性(如果需要)。命名空间和__init__.py
假
模块也在属性访问时执行自动重新加载。在
在中找不到通过fakemod
访问的文件和目录
sys.modules
。这些“假模块”是分开处理的
表现为常规Python模块,具有增强功能。相对
伪模块中的导入执行依赖跟踪,
允许模块的延迟深度重新加载。在
安装
pip install fakemod
禅
- 在
美总比丑好。在
fakemod
是{}的一个有用的替代品 还有 sys.path
黑客攻击。在
- 在
显性胜于隐性。在
- 如果你想要一个文件,请求它。在
- 在
名称空间是一个非常好的主意——让我们做更多的工作吧!在
fakemod
将文件系统转换为命名空间
- 在
应该有一种——最好只有一种——显而易见的方法。在
fakemod
是方法;-)
- 项目
标签: