GAE-包括外部python模块而不将其添加到存储库中吗?
问题内容:
我目前正在研究基于Python的Google App
Engine项目。具体来说,我在应用程序中使用Flask。我想知道包括外部python模块在内的公认方法是什么,特别是涉及存储库时。据我所知,出于以下几个原因,在我的存储库中包含其他人的代码是不好的形式。但是,其他人将使用相同的存储库,因此我们应该使用相同的外部模块来确保相同的结果。
具体来说,我需要在应用程序中包含Flask(及其依赖项)。使用Google App Engine进行此操作的最简单方法是将其置于根目录下:
MyProject
app.yaml
main.py
MyApp
Flask
...
在这样的项目中引入这些外部模块的正确方法是什么?概括性回答和针对我的情况的回答都将很有用。同样,任何其他相关的建议将不胜感激。非常感谢
问题答案:
尽管确实有可能将第三方库包含为来自外部存储库的子模块或符号链接,但实际上这不是一个好主意。以下是两种可能出现问题的方案:
-
如果第三方库发布了破坏功能的新版本,则您将必须进行所有必要的更改以满足新要求,或者只是查找以前的版本以保持正常工作并断开外部连接。通常,这是在您非常接近最后期限时发生的。
-
如果第三方库发布了新版本,并且您的一位同事已升级并进行了所有必要的更改以支持新版本,则在您这一边,代码将被破坏,直到您也进行升级。
在具有大量依赖关系的大型项目中,上述示例更为明显,而从长远来看,随着越来越多的人加入该项目,这将成为一个巨大的问题!我可以提出更多示例,但我认为您可以理解这一点。
最好的选择是将外部库包括在存储库中,这还具有以下优点:您可以在没有很多依赖的情况下在新计算机上启动并运行整个项目。关于组织第三方库的方法有很多,所有这些都需要与app.yaml
文件包含在相同或更深的层次上。正如提到的@dragonx仅包含核心库代码。
另外,不要害怕将内容放入存储库中,因为今天空间不再是问题,这些库通常不会经常更新,因此存储库的大小不会随着时间的推移而变得太大。
自从您在Google App Engine上提到Flask以来,您可以查看我的gae-init项目,在实践中您可以看到外部库的组织方式。