python模块驻留在名称中包含短划线字符的存储库中

时间:2012-07-25 17:41:25

标签: python package

我知道模块的名称不应该破折号。

这是我的存储库结构

my-repo-name/
     src/ 
     tests/
        __init__.py
        tests.py
     fab/
        __init__.py
        fabfile.py

     README.rst
     __init__.py

在我的测试中,我需要导入fabfile.py来运行测试。但由于名称有短划线,我无法进行from my-module-name.fab.fabfile import X,Y,Z或相对导入,因为它是非包装。

任何建议如何在不使用__import__(...)进行黑客攻击或将其添加到sys路径的情况下执行此操作?我应该添加另一个目录吗?

1 个答案:

答案 0 :(得分:6)

使用importlib.import module

import importlib
fabfile = importlib.import_module('my-repo-name.fab.fabfile', None)
X = fabfile.X

但是你应该真正改变存储库的名称。要进行转换,您可以使用

创建临时symlink
$ mv my-repo-name my_repo_name
$ ln -s my_repo_name my-repo-name