version-control - VCS 和 Python 项目结构 : How to setup the PYTHONPATH automatically?

标签 version-control pythonpath project-structure

网上有很多关于 Python 项目的结构可以/应该是什么的建议,例如What is the best project structure for a Python application? .

"proj-dir"
+- doc
+- apidoc
+- scripts
+- "src-dir"
+- tests

似乎 Python 世界中的许多人更喜欢“src-dir”和“proj-dir”相等(或非常相似)。但是,脚本和测试肯定需要从 src-dir 导入一些模块,所以要么我必须
  • 当 proj-dir 作为我当前的工作目录或
  • 时运行所有脚本和测试
  • PYTHONPATH 必须包含 proj-dir,对吗?

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

    假设我有这样的结构并且正确设置了 PYTHONPATH。现在我将项目提交到 VCS,另一个开发人员检查项目。在他的机器上,PYTHONPATH 将无法正确设置,并且脚本和测试中的导入将不起作用。
  • 是否有可能以某种方式使 PYTHONPATH 定义成为项目的一部分,以便它可以成为版本控制的一部分?
  • 是否有不同的项目结构可以让我在不修改 PYTHONPATH 的情况下进行结帐并开始使用该项目?
  • 是这里建议的解决方案:Python - How to PYTHONPATH with a complex directory structure? (即在每个脚本和测试中包含一个简短的 sys.path 修改片段)对吗?
  • 网站模块http://docs.python.org/2/library/site.html有什么帮助吗?
  • 在开发具有类似结构的项目时,您的工作流程是什么?
  • 最佳答案

    即使项目结构复杂且测试用例在不同的包中使用 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
    

    如果 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 
    

    关于version-control - VCS 和 Python 项目结构 : How to setup the PYTHONPATH automatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130523/

    相关文章:

    python - 在没有提升权限的情况下在 Anaconda 下的 Windows 上设置 PYTHONPATH

    java - Intellij IDEA中的蓝点(圆圈)是什么意思?

    project-organization - 将项目拆分为多个项目的原因?

    Java 无法在资源文件夹中找到文本文件

    Git 不识别任何远程分支

    ios - 开发人员如何共享Xcode ios项目?

    git - 我应该使用 SVN 还是 Git?

    ruby-on-rails - Rails for NodeJS 中是否有与 PaperTrail gem 等效的东西?

    python-3.x - 导入父目录进行简单测试

    makefile - 如何将 PYTHONPATH 设置为 Windows 上的当前目录