Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当名称中有连字符时获取包版本_Python_Pypi_Pyscaffold - Fatal编程技术网

Python 当名称中有连字符时获取包版本

Python 当名称中有连字符时获取包版本,python,pypi,pyscaffold,Python,Pypi,Pyscaffold,我使用PyScaffold为我正在创建的PyPi包创建了一个模板,bboxutils。生成的\uuuu init\uuuu.py如下所示: 从pkg\u资源导入分发未找到,获取\u分发 尝试: #如果项目已重命名且与包名不相等,请在此处进行更改 dist_name=“bbox utils” __version\uuuu=获取分发(dist\u名称)。version 除分销未找到外:#pragma:无保险 __版本\=“未知” 最后: del get_分布,分布未找到 我有点搞不清楚该用什么名字

我使用PyScaffold为我正在创建的PyPi包创建了一个模板,
bboxutils
。生成的
\uuuu init\uuuu.py
如下所示:

从pkg\u资源导入分发未找到,获取\u分发
尝试:
#如果项目已重命名且与包名不相等,请在此处进行更改
dist_name=“bbox utils”
__version\uuuu=获取分发(dist\u名称)。version
除分销未找到外:#pragma:无保险
__版本\=“未知”
最后:
del get_分布,分布未找到
我有点搞不清楚该用什么名字来命名
dist\u name
。我试着做:

>>> from pkg_resources import DistributionNotFound, get_distribution
>>> get_distribution('bbox_utils').version
'0.0.1'
>>> get_distribution('bbox-utils').version
'0.0.1'
无论是用下划线替换连字符还是保持原样,我都会得到相同的版本。我该怎么办

编辑:

您通常不应该使用破折号命名软件包或模块,尽管您可以。由于import语句不使用引号,因此使用破折号会被解释为使用减号,如果使用破折号名称,则在导入期间会导致语法非法

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

也就是说,pkg_资源在解析项目名称时似乎实际上用破折号替换了所有非字母数字和非点字符

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

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

您通常不应该使用破折号命名软件包或模块,尽管您可以。由于import语句不使用引号,因此使用破折号会被解释为使用减号,如果使用破折号名称,则在导入期间会导致语法非法

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

也就是说,pkg_资源在解析项目名称时似乎实际上用破折号替换了所有非字母数字和非点字符

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

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

get\u distribution(dist\u name.replace('-',''.'))
感谢您的回答。我的包作为
bbox\u utils
导入,但在PyPI上称为
bbox utils
(我添加了问题的链接)。为什么使用带有连字符和下划线的分发名返回相同的版本?既然他们都工作了,哪一个应该归还?这是有效的语法,所以这并不是真正的答案question@EricWienerpkg_资源模块在生成项目名称变量时,实际上用破折号替换了所有非字母数字和点字符。所以get_distribution('bbox_utils')。project_名称将等于'bbox utils'-您可以使用其中一个。我的答案是在实际项目名称中使用下划线,而不是在这个片段中使用下划线。这是因为你让每个人都必须做一个额外的心理翻译步骤,弄清楚如何在安装后导入你的脚本,或者在他们习惯用下划线导入脚本后将其安装到另一台计算机上。不必要的矛盾是不好的。@MattMiguel谢谢你的澄清!这很有帮助。我查看了Python包,其中很多包的名称中使用了连字符。你是说在PyPI名称中不要使用连字符,还是在导入包时使用
import bbox_utils
?@EricWiener是的,这很常见。我的观点/答案的动机通常是不想同时记住项目名称和包名称。我看到很多帖子说使用连字符是违反PEP8风格指南的。但是我在那里没有看到任何关于这方面的东西。我发现的最接近于PEP 423中的“单一名称”原则,这与我的论点类似——尽量不要使用不同的项目名称和包名称。由于包名称不能真正包含连字符,因此最好项目名称也不能包含连字符。这似乎不是事实上的普遍做法。
get\u发行版(dist\u name.replace('-',''u'))
感谢您的回复。我的包作为
bbox\u utils
导入,但在PyPI上称为
bbox utils
(我添加了问题的链接)。为什么使用带有连字符和下划线的分发名返回相同的版本?既然他们都工作了,哪一个应该归还?这是有效的语法,所以这并不是真正的答案question@EricWienerpkg_资源模块在生成项目名称变量时,实际上用破折号替换了所有非字母数字和点字符。所以get_distribution('bbox_utils')。project_名称将等于'bbox utils'-您可以使用其中一个。我的答案是在实际项目名称中使用下划线,而不是在这个片段中使用下划线。这是因为你让每个人都必须做一个额外的心理翻译步骤,弄清楚如何在安装后导入你的脚本,或者在他们习惯用下划线导入脚本后将其安装到另一台计算机上。不必要的矛盾是不好的。@MattMiguel谢谢你的澄清!这很有帮助。我查看了Python包,其中很多包的名称中使用了连字符。你是说在PyPI名称中不要使用连字符,还是在导入包时使用
import bbox_utils
?@EricWiener是的,这很常见。我的观点/答案的动机通常是不想同时记住项目名称和程序包