Python / Git / Module结构的最佳实践

时间:2013-12-02 10:22:14

标签: python git

我们有很多小项目共享公用事业“项目”

示例
实用程序项目数学包含功能添加
项目 A 和项目 B 都需要 math.add
项目 A 与项目 B

无关

所以有3个git存储库(project_A,project_B和math)并在本地克隆它们是个好主意

/SOMWHERE/workspace/project_A
/SOMWHERE/workspace/math

并且在/SOMWHERE/workspace/project_A/__init__.py中有类似

的内容
import sys
sys.path.append('../math')
import math

math.add()

我已阅读Structuring Your Project但不处理SCM和共享模块。

总结一下我的问题:是

sys.path.append('../math')    
import math

良好的做法还是有更多的“pythonic”方式呢?

2 个答案:

答案 0 :(得分:1)

子模块是您在评论中所说的共享模块的次优方式。更好的方法是使用您选择的语言提供的工具,即Python。

首先,create virtualenvs隔离每个项目的python环境。 Use piprequirements.txt文件中安装包和存储依赖项。

然后,您可以create a specific package for each of your utils library using distutilsshare it on Pypi

如果您不想将包裹放到野外,您还可以host your own Pypi server

使用此设置,您将能够使用不同版本的库并对其进行处理,而不会破坏与旧代码库的兼容性。您还将避免使用难以与git一起使用的子模块。

答案 1 :(得分:0)

你所描述的所有内容(3个项目)听起来不错除了你不应该使用sys.path。相反,设置PYTHONPATH环境变量。

另外,如果你不知道distutils我猜你可能是python开发的新手,可能不知道virtualenv。你也应该使用它(它允许你开发一个没有软件包的“干净”python版本,或只开发你为那个环境安装的软件包。)