Python包和模块版本管理

4
我计划开发一个中等规模的Web应用程序(需要大量后端工作),使用多个包(内部和外部)。由于这是我第一次开发这样规模的应用程序,我想请教一些问题:
  1. 如何确保满足所有依赖关系(没有缺少必需的包/模块,从正确的位置导入包等)?
  2. 如何管理包/模块的版本?我希望能够引入新版本的包/模块,同时最小化其他相关包/模块的代码更改。

请告诉我是否有任何工具可以帮助解决这些问题。如果在管理此规模的代码时存在任何其他挑战(我可能还不知道),请提醒我并提供解决方法。

我目前了解到的(并认为这可能有助于代码管理):

  • __all__ 用于定义可导出的模块。
  • 使用前置单下划线来防止模块被导入。
  • __init__.py 用于在包级别上管理导入(因此当我执行 import package_name 时,__init__.py 可以集中控制其他导入)。
  • PEP 328 用于管理相对导入、importlib 和其他与导入相关的事项。
  • 我想一些第三方包也会定义 __version__VERSION 变量以在运行时检查版本,但我不确定是否可以依赖它。

如果有书籍、博客等可以帮助的话,请告诉我。

编辑:我不确定这种类型的问题是否适合在SO上提问。如果不是,请原谅。

1个回答

0
如何确保所有依赖都已满足(没有缺失的必需包/模块,包从正确的位置导入等)?
使用 virtualenv 并使用 pip 将包 freeze 到一个 requirements 文件中:
$ pip freeze > requirements.txt
$ cat requirements.txt
argparse==1.2.1
distribute==0.6.31
wsgiref==0.1.2

基本上,每当您需要安装模块的一些代码时,请使用virtualenv、distribute和pip。

根据您的requirements.txt中指定的版本安装软件包:

pip install -r requirements.txt

谢谢timss。我使用virtualenv,让我进一步了解freeze是否可以帮助管理软件包的版本并简化引入/测试新软件包。我想了解如何管理我们自己软件包的版本,我们是定义版本变量还是创建类似chat01 chat02的单独软件包。如果我导入package_name,现在我想尝试更新的软件包(将其视为编写版本化REST API并管理它们),该怎么办? - Dev Maha
@AccEnq Freeze可以帮助您管理版本,因为您稍后可以使用pip在requirements.txt中安装带有版本的软件包(更新的答案)。我不确定如何解决个人软件包的问题,但pip也可以从本地文件安装。 - timss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接