【问题标题】:How import package from PyPI with hyphen in name?如何从 PyPI 中导入带有连字符的包?
【发布时间】:2019-11-18 05:06:54
【问题描述】:

PyPI 中有一个包叫做nat-python(是的,带有连字符)。我可以很好地安装它,但不能将它导入 Python。我尝试过使用下划线、括号和将名称设为字符串,但导入语句当然不允许使用它们。 PyPI 是否真的接受带有非法 Python 名称的包,还是有我忽略的解决方案?

【问题讨论】:

标签: python pypi


【解决方案1】:

导入语法中不允许使用连字符。在 'neat-python' 的情况下,软件包只是安装为 'neat':

import neat

您可以通过查看您的站点包目录(对我来说是/usr/local/lib/python3.7/site-packages)自行检查。

编辑:是的,这对于 PyPI 包是允许的,这可能很烦人。通常,实际的包名称将是用于从 PyPI 安装的名称的一些非常相似的变体。

【讨论】:

  • 谢谢。非常有帮助。更疯狂的是,PyPI 中有另一个名为“neat”的包,它是不相关的。我想它也会以“整洁”的形式导入。
  • 在这种特殊情况下,两个包的可导入名称都是neat;这意味着这些软件包不能安装到一个虚拟环境中。但情况并非总是如此——the name of the distribution and its importable name could be completely different.
【解决方案2】:

从 python3.x 开始,您可以将 importlib 用于一些实际安装时名称中带有连字符的通用模块。我将使用neat-python 作为示例,即使我已被告知它实际上安装为neat

--myscript.py--

import importlib
neat = importlib.import_module("neat-python")
# to then call "mymodule" in neat
neat.mymodule(someobject)

【讨论】:

  • 这不起作用。这里的问题是 'neat-python' 使用包名 'neat' 安装
  • 这适用于使用连字符名称实际安装的软件包。
  • 是的,它的工作原理是它是有效的语法......但在这种情况下它不会帮助 OP。
  • 但它确实为未来的访问者解决了问题的标题。他的问题部分是,“PyPI 是否真的接受带有非法 Python 名称的包,还是有我忽略的解决方案?”这完美地解决了。
  • PyPI 是否真的会允许使用需要此名称的名称安装软件包?显然“PyPI 名称”可以被命名为各种各样的东西,但是实际可导入的 python 包必须具有有效的名称吗?
猜你喜欢
  • 2016-07-17
  • 2020-08-17
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2023-03-12
  • 2020-06-13
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多