【问题标题】:pip -e: No magic underscore to dash replacementpip -e:没有神奇的下划线来替换破折号
【发布时间】:2013-10-06 11:36:39
【问题描述】:

如果您使用带有“pip install -e ...”的 git repo 安装,则下划线会更改为破折号。

有没有办法阻止这种情况?

我想自动化一些东西。我希望 repo foo_bar 成为 ~/src/foo_bar,而不是 ~/src/foo-bar

【问题讨论】:

  • 使用python setup.py sdist打包时也会这样做:在生成的PKG-INFO文件中,包名将从foo_bar转换为foo-bar。使用 pip 安装后,它会在已安装的软件包列表中与 - 一起出现。

标签: python virtualenv pip


【解决方案1】:

从我在 Python 邮件列表中的 this questionthis response 中可以看到,这似乎是由于整个 Python 打包系统中的众多命名约定以及它们之间的兼容性。

Pythons setuptools 运行 safe_name 其中:

将任意字符串转换为标准分布名称

任何非字母数字/的运行。字符被替换为单个“-”。

尽管pipeasy_installPyPi 可以接受下划线,但在安装时将其更改为单个“-”以用于 setuptools 标准。

【讨论】:

  • 很高兴知道有一种机制可以替代它,但问题是,如何阻止它。有没有办法停止自动替换?
  • @AlexanderPacha 如何解决?停止使用setuptools。使用更现代的构建和打包工具,例如 flit
【解决方案2】:

请注意,上面的答案是不正确的。代码中的确切正则表达式是re.sub('[^A-Za-z0-9.]+', '-', name)。但是如果你尝试pip install foo!bar,你会得到一个很大的解析错误,所以这也不是真的。

【讨论】:

  • 在 shell 上,! 符号是特殊的。如果我在外壳上写pip install foo!bar,我得到:bash: !bar: event not found。但这一切都无关紧要,因为 AFAIK 没有包使用这样的名称:-)
  • @guettli 取决于外壳:P
  • 你不使用 bash?您使用哪种外壳,为什么更喜欢它?
  • 我用鱼。好多了开箱即用,超级好,速度快。试试看!
猜你喜欢
  • 2010-11-19
  • 2013-04-29
  • 2013-04-01
  • 2011-12-24
  • 2011-05-07
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多