使用RPM包与通过requirements.txt管理依赖关系
我现在在做一个项目,想用多个软件包来构建。之前我用Java/Maven和PHP/composer的经历都很不错,但最近我开始接触Python,发现自己对Python的依赖管理方式还不太了解。我在研究用pip配合requirements.txt文件来管理依赖,还有用setup模块来存放依赖。我对用txt文件的方式不是很感冒,不过这又是另一个话题。
有人建议我从Python模块构建rpm包,然后用puppet来管理这些包在我们的环境中。我想知道用这种方式来管理依赖和用pip在主仓库中管理依赖相比,有什么优缺点。
希望这样说能让你明白。提前谢谢你!
1 个回答
1
Puppet确实是一个很棒的工具,用来管理依赖关系。就我个人而言,从Python模块构建RPM包有点麻烦。Puppet的package
类型实际上支持pip提供者。
下面是一个Puppet类,它会从pip安装几个示例包(前提是已经安装了EPEL仓库,以便通过yum
安装python-pip
):
class pip_modules {
package { "python-pip":
ensure => installed,
}
$pip_packages = [
"requests",
"simplejson"
]
package { $pip_packages:
ensure => installed,
provider => pip,
require => Package["python-pip"]
}
}
我还没决定这个方法是否比requirements.txt
更好,后者可能是更符合Python风格的指定依赖的方式。确实,运行pip freeze > requirements.txt
来更新依赖会简单很多,但你还是得在某个时候执行pip install -r requirements.txt
,可能还得通过Puppet的exec
来执行。
就我个人而言,我一般选择上面提到的方式,因为我觉得构建和管理RPM包的额外工作量比较大,虽然也有观点认为使用本地包(即RPM)是更好的选择。不过,pip和Puppet是与操作系统无关的,所以如果你需要在多个操作系统上安装,避免使用RPM可以省去你制作.deb
或其他文件的麻烦。