1

如何组织 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。

如何组织我的各种模块的导入语句,以及我的init .py 文件的内容,以满足这些目标?

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

4

1 回答 1

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。

您可以在其中添加祖父母和曾祖父母,PWDPYTHONPATH我从未听说过,这听起来很糟糕。foobar如果您希望 foobar 包可用,无论您走多远,您都无法真正绕过安装,即把它放在您的路径上。

于 2012-05-29T21:38:23.657 回答