组织Python包从其顶级目录运行?

时间:2012-05-29 20:19:01

标签: python

如何组织Python包,使其代码从顶级目录运行,而不将该目录添加到主机的Python路径中?

我还想组织代码,以便我可以从各种测试子目录运行测试,同样不需要将软件包的顶级目录添加到python路径。

考虑以下代码布局:

foobar/
  __init__.py
  README.txt
  its_a_module.py
  one_package/
    __init__.py
    foo.py
    bar.py
    tests/
      __init__.py
       testing_one_package.py
  tests/
    __init__.py
    test_foobar.py
  • 在foobar /中,我应该能够在python解释器中导入foobar及其所有子模块
  • 从foobar /,我应该能够运行tests / test_foobar.py。
  • 从foobar / tests,我应该可以运行test_foobar.py
  • 从one_package / tests,我应该可以运行testing_one_package.py。

如何组织各种模块的import语句以及 init .py文件的内容,以实现这些目标?

(我想使用distutils来管理代码,我读到从顶级目录运行代码是一个有用的前提。)

1 个答案:

答案 0 :(得分:0)

您可以将..添加到PYTHONPATH。这将满足您的前两个条件:

  • 在foobar /中,我应该能够在python解释器中导入foobar及其所有子模块
  • 从foobar /,我应该能够运行tests / test_foobar.py。

您始终可以绝对导入import foobarfrom foobar.one_package import ...import one_package以及其他相关导入。通过这种方式,您可以运行foobar目录中的任何子模块。

对于其他两项规定,

  • 从foobar / tests,我应该可以运行test_foobar.py
  • 从one_package / tests,我应该可以运行testing_one_package.py。

你可以将PWD的祖父母和曾祖父母添加到PYTHONPATH,但我从未听说过这一点,听起来很糟糕。你不能真正安装foobar,即把它放在你的道路上,如果你想要foobar包可用,无论你走多远。