如何解决当名称中有连字符时获取包版本
我使用 PyScaffold 为我正在创建的 PyPi 包创建模板,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'
无论我用下划线替换连字符还是保持原样,我都会得到相同的版本。我应该怎么做?
编辑: Here is the GitHub repo Here is PyPi link
解决方法
尽管可以,但您通常不应使用破折号命名您的包或模块。由于 import 语句不使用引号,因此使用破折号会被解释为使用减号,如果使用破折号名称将导致导入过程中出现非法语法。
有很多方法可以解决这个问题,例如使用下划线导入但通过 pip 安装/使用破折号搜索 pypi,但这是一种不必要的不一致,可能会导致沮丧。通常,python 方法是能够将模块作为有效模块对象导入,其变量名称等于实际模块名称。因此,在命名项目时,最好使用下划线而不是破折号。
话虽如此,在解析项目名称时,pkg_resources 似乎实际上用破折号替换了所有非字母数字和非点字符。
assert(get_distribution('bbox_utils').project_name == 'bbox-utils')
assert(get_distribution('bbox-utils').project_name == 'bbox-utils')
因此,您应该能够在问题的代码片段中交替使用任一表达式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。