Как импортировать пакет из PyPI с дефисом в имени? - PullRequest
2 голосов
/ 08 июля 2019

В PyPI есть пакет, называемый neat-python (да, с дефисом).Я могу установить его просто отлично, но не могу импортировать его в Python.Я пробовал подчеркивание, круглые скобки, а также превращал имя в строку, но, конечно, оператор import их не допускает.Принимает ли PyPI пакеты с недопустимыми именами Python или есть решение, которое я пропускаю?

Ответы [ 2 ]

3 голосов
/ 08 июля 2019

Дефис не разрешен в синтаксисе импорта. В случае 'neat-python' пакет просто устанавливается как 'neat':

import neat

Вы можете проверить это самостоятельно, заглянув в каталог вашего сайта-пакетов (для меня это /usr/local/lib/python3.7/site-packages).

Редактировать: и да, это разрешено для пакетов PyPI, и это может раздражать. Обычно реальное имя пакета будет очень похожим вариантом имени, используемого для установки из PyPI.

1 голос
/ 08 июля 2019

Начиная с 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)
...