python模块位于一个包含破折号字符的存储库中。

7 浏览
0 Comments

python模块位于一个包含破折号字符的存储库中。

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

这是我的仓库结构:

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路径的情况下完成这个操作?我应该只是添加另一个目录吗?

0
0 Comments

问题出现的原因是Python模块存在于一个包含破折号字符的存储库中,而Python中的标准导入语法不允许使用破折号作为模块名称的一部分。

解决方法是使用`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

这样做是一种解决方法,但是问题更多地是如何重新组织存储库的结构,以便不需要重命名并仍然能够进行导入。有人也使用类似的存储库名称。

另一个解决方法是添加一个额外的目录。这个解决方法也是可行的。

感谢大家的建议!最终我选择了添加一个额外的目录的解决方法。

0