【问题标题】:Project structure for python projects with maven带有maven的python项目的项目结构
【发布时间】:2012-04-03 18:59:19
【问题描述】:

是否有任何工具可以为特定于 python 的项目生成项目布局,非常类似于 maven 为 java 项目使用 mvn archetype:generate 完成的功能。

【问题讨论】:

标签: python maven


【解决方案1】:

这是个好消息:您不需要任何工具。你可以用任何你想要的方式组织你的源代码。

让我们回顾一下为什么我们在 Java 世界中需要工具:

在 java 中,您希望预先生成目录,因为命名空间系统规定每个类必须位于反映该包层次结构的目录结构中的一个文件中。因此,您有一个很深的文件夹结构。 Maven 对文件位置实施了一组额外的约定。您希望有工具来自动执行此操作。

其次,不同的人工制品需要使用不同的目标,甚至需要额外的 maven 项目(例如,ear 项目需要一些 jar 和战争人工制品)。有很多文件要创建,您希望有工具来自动执行此操作。

复杂性使得像mvn archetype:generate 这样的工具不仅有用。这几乎是必不可少的。

在 python 领域,我们只是没有语言中的这些复杂性。

如果我的项目很小,我可以将所有类和函数放在一个文件中(如果有意义的话)

如果我的项目规模更大(LOC 或团队规模),那么将.py 文件以对您和您的同行有意义的任何方式组合成模块是有意义的。

归根结底,它是关于在易于维护和可读性之间取得平衡。

【讨论】:

  • 我同意,但鉴于 Maven 喜欢强制执行文件夹结构,我猜原作者确实希望与此保持一致。并且可能希望向他们确认答案“src/main/python”或“src/main/py”!
  • 您可以在 Python 中以任何您想要的方式组织代码这一事实并不意味着您应该这样做。能够预先生成结构是有意义的。像scaffold-py这样的项目表明,Python(或任何语言)也需要这样做。
  • 但是如果你想要一个用于无服务器、lambda 和 python 的模板项目?我的印象是不管你选择什么语言都有配置。
【解决方案2】:

在 Python 中(就像在任何语言中一样),如果您想让它们都很好地协同工作,则需要配置很多部分。文档、测试、虚拟环境、打包……

您可以一路添加这些配置,当您真正需要它们时,或者当您的项目开始增长时。拥有一个可以为您配置所有内容并让您填补空白的工具确实很有帮助。

几个值得关注的项目:

【讨论】:

  • Cookiecutter 看起来正是我想要的。
【解决方案3】:

以下几个 bash 命令对我来说效果很好:

mkdir myproject
cd myproject
mkdir docs
mkdir tests
touch tests/__init__.py

使用 python,与 java 或 c 不同,您通常不需要更多。有关相关问题,请参阅 the answers。如果您认为您需要更多,您将不得不更具体地说明您的要求。

【讨论】:

  • 但是如果你想要一个用于无服务器、lambda 和 python 的模板项目?我的印象是不管你选择什么语言都有配置。
【解决方案4】:

对于 Python 和 maven,按照最初的要求(即 Java 也可以使用),您可以使用
https://github.com/paulvi/java-python-graalvm-template

标准的 maven 文件夹布局意味着这样的事情

src
|---main
|   |---java (Keep your java files here)
|   |---resources
|   |---python (You can keep you python files here)
|        
|---test
|   |---java (Keep your java unit test files here)
|   |---resources (If you have any resources test specific)
|   |---python (for python test here)
|  

但我敢打赌它会让事情变得更容易,而不是 src/test/python 使用src/main/python/test 并将test 子文件夹从复制到生成的jar/war 分发中排除。

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多