(我意识到 StackOverflow 上有很多与 python 相关导入相关的问题;我也怀疑我做错了;但无论如何都在这里..)
我有一个 python 项目(mysubmod),组织如下:
/__init__.py
/lib
- /__init__py
- /foobar.py
/models
- /__init__.py
- /hello.py
重要的:
- /models/hello.py 导入 lib.foobar
- /models/hello.py 有一个运行一些测试的主块
然后我有第二个项目(myproj),我将 mysubmod 作为 git 子模块导入其中;myproj 现在组织如下 -
/mysubmod
/scripts
- /__init__.py
- /__test.py
在哪里:
- scripts/test.py 导入 mysubmod.models.hello
但是,当我从命令行运行 /scripts/test.py 时,解释器现在抱怨 mysubmod/models/hello.py 无法再找到 lib.foobar。
重新加载。
更改了 mysubmod/models/hello.py 所以它现在导入 ..lib.foobar
现在我可以毫无怨言地运行 /scripts/test.py,但我不能再从命令行将任何 submod 脚本作为文件运行;我只能使用 python -m 选项将它们作为模块运行。
此外,即使使用 -m 选项,我也不能再单独运行 submod 项目文件,因为解释器会抱怨“尝试相对导入超出顶级包”;我必须上一级目录,即只能从 myproj 根目录真正运行 mysubmod(其中 mysubmod 作为根目录)。
这一切似乎都不太令人满意。我希望能够:
- 使用 git submodule 将 mysubmod 导入 myproj 以便它“正常工作”
- 继续能够独立开发 mysubmod(即作为文件而不是模块运行脚本)
有没有人对如何做到这一点有任何看法?关于 git submodule 和 python 的最佳实践有什么看法吗?
谢谢。