Python 如何从名为连字符的PyPI导入包?

Python 如何从名为连字符的PyPI导入包?,python,pypi,Python,Pypi,PyPI中有一个名为neat python的包(是的,带有连字符)。我可以很好地安装它,但无法将其导入Python。我尝试过使用下划线、括号,并将名称设置为字符串,但import语句当然不允许使用它们。PyPI是否真的接受带有非法Python名称的包,或者是否存在我忽略的解决方案?导入语法中不允许使用连字符。对于“neat python”,软件包只需安装为“neat”: import neat 您可以通过查看站点软件包目录来检查这一点(对我来说,就是/usr/local/lib/python3

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

导入语法中不允许使用连字符。对于“neat python”,软件包只需安装为“neat”:

import neat
您可以通过查看站点软件包目录来检查这一点(对我来说,就是
/usr/local/lib/python3.7/site-packages


编辑:是的,这是允许PyPI软件包使用的,这可能会很烦人。通常,实际的软件包名称与从PyPI安装时使用的名称非常相似。

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

--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包是否需要一个有效的名称呢?谢谢。非常有用。更疯狂的是,PyPI中还有另一个称为“neat”的包,它是不相关的。我想它也会以“neat”的形式导入。在这种特殊情况下,两个包的可导入名称都是
neat
;这意味着这些包不能安装到一个虚拟环境中。但情况并非总是如此-,这是否回答了你的问题?我想知道为什么这个问题没有包含到讨论项目的链接。就在这里;;——我不得不说,即使是文档也缺少如何在Python代码中使用(导入)模块的信息。