可自动重写的模块和名称空间

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

fimportffrom对象可以接受文件系统路径或 带有前导点的类似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是方法;-)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java嵌套循环打印一个数字,旁边有相同数量的星号   java JodReports替代方案   java如何将模型类parcelable对象从片段传递到活动?   java JCS缓存删除功能不删除特定元素   如何打开。Java的dll文件。   java在这种情况下如何选择聚合根?   java从CellEditorListener获取编辑的TreeNode   Java到web服务和mysql   从openssl ec在Java中创建公钥时出现加密无效密钥异常   Java数组:添加多个数组的元素时忽略空数组   java在初始化后向fragment发送数据   JButtons的java数组正在返回void   若联接列不包含特定值,则java JPA条件生成器仅返回实体   java ActionBar问题:NPE   java Portlet是被广泛使用还是非常罕见?