4

我正在编写一个 Python 包。包需要在内部知道它的版本号,同时还要在setup.py脚本中包含这个版本distutils

这样做的最佳方法是什么,以便不需要在两个不同的地方维护版本号?我不想setup.py从我的库的其余部分导入脚本(这看起来很傻),我不想从setup.py脚本中导入我的库(同样)。理想情况下,我只需设置一个关键字svn并自动将其替换到文件中,但这似乎在svn. 我可以在两个地方读取一个包含版本号的通用文本文件——这是最好的解决方案吗?

澄清一下:我想在一个地方维护版本号。是的,我可以在包中放一个变量,然后再在setup.py文件中放一个变量。但随后它们不可避免地会不同步。

4

4 回答 4

5

在你的主包里面,你可能有一个__init__.py,对吧?

目录结构:

> ./packageTest
>   ./packageTest/__init__.py
>   ./packageTest/setup.py

__init__.py文件中,添加以下行:

# package directory __init__.py
__version__ = 1.0

setup.py 文件:

# setup.py
from packageTest import __version__
...

现在在从包目录导入的任何模块中(我将调用 packageTest),您可以这样做:

from packageTest import setup
print 'Setup.py version:', setup.__version__  
# prints Setup.py version: 1.0
于 2009-03-10T19:50:52.073 回答
0

在你的包中导入安装脚本是愚蠢的(特别是因为在你的库安装后它可能不再存在),但是在 setup.py 中导入你的库应该没问题。单独的文本文件也可以,但是如果您想在运行时访问版本号,则必须将文本文件与您的包一起安装。

于 2009-03-10T20:04:51.400 回答
0

我的项目也有类似的问题。我编写了一个名为build.py的顶级 test/build/package/deploy 脚本(请注意,不是基于 distutils)。它读取一个包含集中版本号的属性文件。我没有直接维护 setup.py 文件,而是保留了一个模板文件,我的 build.py 脚本将其读入,将 version 变量替换为 props 文件中的值,然后写出 setup.py 脚本。然后我的脚本文件将执行它,生成一个包或上传到 pypi。

于 2009-03-10T20:14:27.367 回答
0

另请参阅将版本嵌入 python 包的标准方法?这是关于如何将版本信息从一个位置(一个名为 的文件_version.py)传播到其他代码查找它的位置(例如,一个名为的属性__version__PEP 0345元数据)。

然后看看 Brian Warner 的新“versioneer”工具,它_version.py根据版本控制历史生成文件。

另外,请查看我对将版本嵌入python包的标准方式的回答?,越多的人意识到有一种方法可以避免从安装脚本导入模块的问题,越好。

于 2012-01-16T15:45:55.903 回答