我写了一个 Python 模块,它存储在一个仓库中。现在为了运行该模块的单元测试,这些测试不能是该模块的子文件夹。建议采用以下结构来解决这个问题:
ModuleRepo/
MyModule/
__init__.py
some_utils.py
import .some_helpers
some_helpers.py
Tests/
some_utils_test.py
import MyModule.some_utils
some_helpers_test.py
import MyModule.some_helpers
现在一切都很好。如果我运行测试,它们可以导入该模块。该模块能够通过在前面添加“。”来指示本地文件夹来导入自己的文件(例如:some_helpers)。
问题在于另一个仓库现在想要共享此模块,而我不知道如何使其找到该模块。
例如:
ModuleRepo/
MyModule/
__init__.py
...
Tests/
...
AnotherRepo/
using_my_module.py
import ??? <-- how to find MyModule?
尝试失败 #1:
我最初尝试使用git的子模块功能将ModuleRepo包含在AnotherRepo下面。但是,我实际上不想要ModuleRepo的根目录,我只想要子文件夹'MyModule'。结果发现git的子模块并不能做到这一点——一个不能只选择一个仓库的一部分来包含。
不理想的符号链接:
虽然符号链接可能起作用,但它不是可以“提交”到存储库的东西,因此有点不理想。此外,我需要在Windows和Linux上进行开发,因此需要一个适用于两者的解决方案。
可能的解决方案:
将ModuleRepo的根目录也变成一个模块(添加一个init.py)。然后,我可以使用git将其作为AnotherRepo的子模块。我的导入会很丑,但它将是:import my.module.some_utils而不是import mymodule.some_utils。有没有更好的解决方案?