2

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

这是我的存储库结构

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__(...)或将其添加到系统路径的情况下做到这一点?我应该添加另一个目录吗?

4

1 回答 1

8

使用importlib.import module

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

但你真的应该只更改存储库的名称。要转换,您可以创建一个临时符号链接

$ mv my-repo-name my_repo_name
$ ln -s my_repo_name my-repo-name
于 2012-07-25T17:46:20.310 回答