【问题标题】:Organize python scripts for a data science project为数据科学项目组织 Python 脚本
【发布时间】:2021-05-10 19:17:07
【问题描述】:

我有一个包含许多子文件夹的文件夹,每个子文件夹都有 (n) 个 python 脚本,它们为项目执行各种任务。它可以是数据分析,调用其他脚本,自动化一些东西等。这些脚本中的一些是相互关联的,一些是独立的。但它们都是同一个“项目”的一部分。

我来自 Java 世界,习惯于将与项目相关的所有内容打包在 .jar 文件中。我可以做一些类似的事情来组织这些狂野的 python 脚本,甚至可以为所有这些脚本提供一个共同的入口点吗?

【问题讨论】:

    标签: python devops


    【解决方案1】:

    是的,您可以打包项目并安装它。我喜欢使用Poetry 进行依赖管理、virtualenvs 和打包。它可以在虚拟或全局环境中安装您的项目,或者为您的项目构建一个 *.whl,使其 pip 可安装在其他地方(在 docker 容器、云资源等中)。它有点像 Python 的 Maven。

    至于“狂野脚本”,没有理由让你的 python 代码杂乱无章。仍然鼓励您在清洁代码、模块化 OO 设计模式、良好封装、依赖注入等方面的所有常规习惯; python 只是不会像 Java 那样将那些护栏强加给你,所以它非常“带上你自己的好习惯”。我经常将我的 python 项目组织成模块化的 java-esque 子包,其中定义了我的域模型和其他可重用组件。然后可以将这些导入到我在脚本文件夹中编写的任何脚本中。这也使脚本本身更易于维护和有序。

    一个粗略的示例结构可能是(取决于项目的类型)

    project-root
       - domain
         - domain_model_a
         - domain_model_b
       - training
         - machine_learning_model
       - storage
         - repository
            - domain_model_a_repository
            - domain_model_b_repository
         - service
            - elastic_search_service
       - script
            - script_that_does_X
            - ml_training_script
    
    

    最后,如果您希望能够跳转到并调用(例如)存储库或服务作为用于调试目的的脚本,那么您的开发工作流程可以在组件底部添加 if __name__ == "__main__": 脚本。并告知您要编写什么样的集成测试。

    【讨论】:

      【解决方案2】:

      您可能想看看这个cookiecutter 的数据科学项目。

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 2012-10-21
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多