【发布时间】:2013-03-27 20:29:52
【问题描述】:
(我意识到 StackOverflow 上存在很多与 python 相关导入相关的问题;我也怀疑我做错了;但无论如何……)
我有一个 python 项目 (mysubmod) 组织如下:
/__init__.py
/lib
- /__init__py
- /foobar.py
/models
- /__init__.py
- /hello.py
重要的是:
- /models/hello.py 导入 lib.foobar
- /models/hello.py 有一个运行一些测试的 main 块
然后我有第二个项目(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 的最佳实践有什么看法吗?
谢谢。
【问题讨论】:
标签: python