2013-04-21 88 views
2

我打算使用多个包(内部和外部)开发一个中等规模的网络应用程序(有很多后端工作的),因为它是我这样的规模第一次的经验,我可以得到一些建议于:Python包和模块的版本管理

  1. 如何确保满足所有相关性(无需封装/模块丢失,包是从正确的位置等进口)
  2. 如何管理软件包/模块的版本。我希望能够在其他连接的软件包/模块中使用最少的代码更改来引入新版本的软件包/模块。

请让我知道是否有一个工具,可以在这方面的帮助。 如果有来与这种规模的管理代码的任何其他挑战(我可能甚至不知道的),那么请慎用我提供的方法来解决这个问题。

目前我所知道的(并且认为它可以在代码管理帮助):

  • __all__定义导出模块。
  • 使用前述单下划线的,以防止从得到进口
  • __init__.py模块来管理在封装级(所以当我做import package_name然后__init__.py可以集中控制其它进口)
  • PEP 328进口管理相对导入,导入库和其他类似的东西在导入。
  • 我想一些第三方软件包还定义__version__VERSION变量来检查在运行时的版本,但我不知道我是否可以依靠它。

如果有书籍,博客等可以帮助,那么请让我知道。

编辑:我不知道,如果这类型的问题适合在这里SO。如果不是的话,我表示歉意。

回答

0

如何确保满足所有相关性(无需封装/模块丢失,包是从正确的位置等进口)

使用virtualenvfreeze包与piprequirements文件:

$ pip freeze > requirements.txt 
$ cat requirements.txt 
argparse==1.2.1 
distribute==0.6.31 
wsgiref==0.1.2 

基本上,使用的virtualenv,分发和点子,只要你有一些代码,将需要安装的模块。

要根据您的requirements.txt指定的版本安装包:

pip install -r requirements.txt 
+0

感谢TIMSS。我使用virtualenv,让我进一步阅读以了解冻结是否可以帮助管理软件包的版本并简化新软件的引入/测试。我想了解我们如何管理我们自己的软件包版本,我们是否定义版本变量,或者我们创建单独的软件包,如chat01 chat02。如果我有import package_name,现在我想尝试一个更新的软件包(认为它是编写版本化的REST API并管理它们) – 2013-04-21 17:38:06

+0

@AccEnq Freeze可以帮助您管理版本,因为您稍后可以在需求中安装具有版本的软件包.txt“与点(更新答案)。我不确定你将如何用个人软件包解决它,但点可以从本地文件安装。 – timss 2013-04-21 17:55:43