建议要求:Python Imports的最佳实践
我需要建议:主要项目如何进行Python导入以及标准/ Pythonic方式来设置它。
我有一个项目 Foobar ,这是另一个更大,使用更充分的项目 Dammit 的子项目。我的项目目录如下所示:
/opt/foobar
/opt/foobar/bin/startFile.py
/opt/foobar/bin/tests/test_startFile.py
/opt/foobar/foobarLib/someModule.py
/opt/foobar/foobarLib/tests/test_someModule.py
所以,对于Dammit项目,我加入PYTHONPATH:
export PYTHONPATH=$PYTHONPATH:/opt/foobar
这让我可以添加一个非常清晰,易于追踪的导入:
from foobarLib.someModule import SomeClass
全部3个: * Dammit - 在导入中使用foobarLib让每个人都知道它不在Dammit项目中,它在Foobar中。 *我的startFile.py是一个具有相同pythonpath导入的附属进程。 * test_someModule.py也有明确的导入。
问题:这仅适用于foobarLib,而不适用于bin。
我想在/opt/foobar/bin/tests/test_startFile.py中运行测试。但是,如何设置路径并进行导入?我应该像这样进行相对导入:
PROJ_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
sys.path.insert(0, PROJ_ROOT)
或者,我应该将bin目录重命名为foobarBin,以便我执行导入:
from foobarBin.startFile import StartFile
我很想做以下事情:
/opt/foobarProject/foobar
/opt/foobarProject/foobar/bin/startFile.py
/opt/foobarProject/foobar/bin/tests/test_startFile.py
/opt/foobarProject/foobar/foobarLib/someModule.py
/opt/foobarProject/foobar/foobarLib/tests/test_someModule.py
然后,我可以用以下内容完成所有导入:
import foobar.bin.startFile
import foobar.lib.someModule
基本上,对于大型Python项目(以及他们的ADJUNCTS),在我看来,我们的目标是:
我已经使用了很长时间的Python,并成为了各种方式的项目的一部分,其中一些更愚蠢,一些更少。我想我想知道这里是否有最好的做法,以及它的原因?我的常规是添加foobarProject层好吗,好,坏,还是只有一种方式?