python模块位于一个包含破折号字符的存储库中。
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路径的情况下完成这个操作?我应该只是添加另一个目录吗?
问题出现的原因是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
这样做是一种解决方法,但是问题更多地是如何重新组织存储库的结构,以便不需要重命名并仍然能够进行导入。有人也使用类似的存储库名称。
另一个解决方法是添加一个额外的目录。这个解决方法也是可行的。
感谢大家的建议!最终我选择了添加一个额外的目录的解决方法。