繁体   English   中英

当名称中包含连字符时,获取 package 版本

[英]Getting a package version when the name has a hyphen in it

我使用 PyScaffold 为我正在创建的 PyPi package 创建模板bbox-utils 生成的__init__.py如下:

from pkg_resources import DistributionNotFound, get_distribution

try:
    # Change here if project is renamed and does not equal the package name
    dist_name = "bbox-utils"
    __version__ = get_distribution(dist_name).version
except DistributionNotFound:  # pragma: no cover
    __version__ = "unknown"
finally:
    del get_distribution, DistributionNotFound

我有点困惑dist_name使用什么名称。 我试着做:

>>> from pkg_resources import DistributionNotFound, get_distribution
>>> get_distribution('bbox_utils').version
'0.0.1'
>>> get_distribution('bbox-utils').version
'0.0.1'

无论我用下划线替换连字符还是保持原样,我都会得到相同的版本。 我应该做什么?

编辑:这里是 GitHub repo这里是 PyPi 链接

尽管可以,但通常不应使用破折号来命名您的包或模块。 由于导入语句不使用引号,因此使用破折号被解释为使用减号,如果使用破折号名称,这将导致在导入期间出现非法语法。

有一些方法可以解决这个问题,例如使用下划线导入但通过 pip 安装/使用破折号搜索 pypi,但这是一种不必要的不一致,可能会导致挫败感。 通常,python 方法是能够将模块作为变量名称等于实际模块名称的有效模块对象导入。 因此,在命名项目时,最好使用下划线而不是破折号。

话虽如此, pkg_resources 在解析项目名称时似乎实际上用破折号替换了所有非字母数字和非点字符。

assert(get_distribution('bbox_utils').project_name == 'bbox-utils')
assert(get_distribution('bbox-utils').project_name == 'bbox-utils')

因此,您应该能够在问题的代码片段中互换使用任一表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM