如何从名称中带有连字符的 PyPI 导入包?

How import package from PyPI with hyphen in name?

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

导入语法中不允许使用连字符。在 'neat-python' 的情况下,包被简单地安装为 'neat':

import neat

你可以通过查看你的 site-packages 目录(对我来说,就是 /usr/local/lib/python3.7/site-packages)来自己检查。

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

从 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)