VCS 和 Python 项目结构:如何自动设置 PYTHONPATH?

Pos*_*osa 5 version-control project-structure pythonpath

网上有很多建议 Python 项目的结构可以/应该是什么,例如Python 应用程序的最佳项目结构是什么?.

"proj-dir"
+- doc
+- apidoc
+- scripts
+- "src-dir"
+- tests
Run Code Online (Sandbox Code Playgroud)

似乎 Python 世界中的许多人更喜欢“src-dir”和“proj-dir”相等(或非常相似)。但是,脚本和测试肯定必须从 src-dir 导入一些模块,所以要么我必须

  • 当 proj-dir 作为我当前的工作目录时运行所有脚本和测试,或者
  • PYTHONPATH 必须包含 proj-dir,对吗?

或者,还有其他我现在忽略的可能性吗?

假设我有这样的结构并正确设置了 PYTHONPATH。现在我将项目提交到 VCS 中,另一个开发人员检查了该项目。在他的机器上,PYTHONPATH 将无法正确设置,脚本和测试中的导入将无法工作。

  1. 是否有可能以某种方式使 PYTHONPATH 定义成为项目的一部分,以便它可以成为版本控制的一部分?
  2. 是否有不同的项目结构可以让我在不修改 PYTHONPATH 的情况下进行结账并开始使用项目?
  3. 是这里建议的解决方案:Python - How to PYTHONPATH with a complex directory structure?(即在每个脚本和测试中包含一个简短的 sys.path 修改片段)正确的吗?
  4. 站点模块http://docs.python.org/2/library/site.html会有帮助吗?
  5. 在开发具有类似结构的项目时,您的工作流程是什么?

Ven*_*esh 1

即使项目结构复杂并且测试用例在不同的包中使用src,您也可以在Windows的环境变量中添加PYTHONPATH

我的电脑 --> 属性 --> 系统属性 --> 高级选项卡 --> 环境变量。添加新的系统变量 PYTHONPATH 并将项目目录附加到该变量,并使用分隔符“;”

我建议您将 readme.txt 保留到您的项目中,其中清楚地说明了如何添加 PYTHONPATH 以便运行脚本。类似于添加 android-sdk 的 PATH 以使 adb shell 工作,添加 Java 路径以使 Java 在命令提示符下工作

因此,readme.txt 有助于在不同的计算机上下载时运行脚本,只需进行一处更改(添加 PYTHONPATH 变量,其值 = 项目路径)

无需添加 src 的所有模块即可使使用 src 的测试用例正常工作

这是一个示例项目结构:

SAMPLEPROJECT
    src
      com
        sample
          example
            utils
              a.py
              b.py

    testcases
      test1.py
      test2.py

    res
    docs
Run Code Online (Sandbox Code Playgroud)

如果 test1.py 测试用例使用 a.py 和 b.py:不要将 utils 模块添加到 PYTHONPATH,因为您已经将项目路径添加到 python 路径,您的导入语句在 test1.py 中看起来像这样

from src.com.sample.example.utils import a.py
from src.com.sample.example.utils import b.py 
Run Code Online (Sandbox Code Playgroud)