首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目结构。科学Python项目

项目结构。科学Python项目
EN

Stack Overflow用户
提问于 2014-09-05 20:06:51
回答 1查看 300关注 0票数 0

我正在寻找一种更好的方法来组织我的研究项目。我有以下设置:

有项目abc和一个库lib。每个项目处理一个不同的研究问题,库包含跨项目使用的代码。因此,所有项目都依赖于lib。事情变得更加复杂,因为项目c也依赖于项目ab。当我在项目c工作时,我还会同时更新ablib。每个项目都位于一个单独的git存储库中。

到目前为止,我已经通过通过git submodule包含上面的依赖项来处理这种情况,并且所有源文件都位于项目的根dir中。优点是我跟踪我的项目所依赖的lib版本。另外,我的一个项目可能依赖于过时版本的lib。我在没有“安装”任何软件包到站点软件包的情况下运行根目录中的所有内容。当路径设置不正确时,我将通过sys.path.insert重写它。

但是,以下几点使我想要更改布局:

  • 我一直不知道我在编辑哪个版本的lib
  • 我想使用自动测试工具(毒理,詹金斯等)。使用标准的项目设置似乎要容易得多。
  • sys.path.insert可能导致难以调试的微妙问题。
  • 无论如何,我通常都希望我的所有项目都能使用lib的技巧。

因此,我目前正在重新安排所有项目(特别是lib),使其符合标准的virtualenv目录结构(源存储在子目录中,根包含一个setup.py文件),以便能够在virtualenv中工作。然后,我可以在requirements.txt中列出我的所有依赖项。首先,我通过pip作为开发工具安装-e。然后我运行pip > requirements.txt,其中包括一个类似于此的行。

代码语言:javascript
复制
-e git+<path_to_remote>@<sha>#egg=`lib`

因此,我再次生成了与git submodule一样的特定提交(sha)的依赖关系,确保我可以签出一个旧的提交,并且项目应该运行。现在,我可以在virtualenv中安装所有东西,并解决路径问题。太棒了。

不过,我遇到了一些新的麻烦。一个问题是,如何在requirements.txt中更新sha。我看到的最简单的(但可能不是最优雅的)解决方案是编写一个pre-commit hook,在执行之前更新sha。有更好的办法吗?

更广泛地说-你认为有更好的解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-09 10:55:24

据我所见,你已经基本上解决了你的问题,只剩下一点点了。

1)不要使用散列来识别库的版本。即使您没有将库发布到Cheese,也要做一个正常的库版本控制(符号学),并相应地标记git存储库。以某种方式,您将在依赖项的git+https://github.com/... URL中具有可读的和可管理的版本。

2)让你的毒理设置能够让你测试稳定版本的依赖(你上次标记)和主版本,从最新的回购修订。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25693246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档