Python: два пакета с одинаковым именем; как вы указываете, какой загружен? - PullRequest
6 голосов
/ 08 февраля 2012

У меня есть два пакета, которые устанавливают разные пакеты с одинаковыми именами.Оба они являются «пакетами», поскольку в них есть файлы setup.py верхнего уровня, в которых в команде setup указано package=['foo'].

Если я установлю с помощью distutils.core, последний из них будет перезаписанпредыдущий (но я думаю, что не будет перезаписывать, если все файлы .py имеют одинаковые имена?).Если я установлю с помощью setuptools, два пакета будут установлены в разные яйца.

Один из вариантов - явно установить sys.path перед импортом имени пакета;это кажется "непитонным" и довольно грязным.

Если у меня установлены эти два пакета с одинаковыми именами в разных eggs из setuptools, как мне указать, какой из них импортируется?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Руководство по установке упоминает - многоверсионный ( -m ) переключатель, который полностью удаляет пакет из sys.path . Вы должны использовать pkg_resources.require ('package == version') в своем коде как можно раньше, чтобы он мог исправить sys.path . Этот совет - то, что easy_install всегда печатает, когда используется -m .

Но вы не можете импортировать оба одновременно (если они не предназначены для этого с использованием пакетов пространства имен ).

0 голосов
/ 08 февраля 2012

Я думаю, что лучший способ обойти это, это изменить имя каталога верхнего уровня, если другие пакеты не зависят от этого пакета.

Вы можете сделать это, изменив файл setup.py или просто изменив имя папки непосредственно в пакетах сайта. Яйцо - это просто метаданные.

Что касается настройки sys.path, то лучше использовать модуль сайта, создав файл .pth. При создании экземпляра любые пути, расположенные в этом файле, будут добавлены в «заголовок» пути python.

Являются ли эти два пакета различными, и именование является совпадением, или они просто являются ветвями одного и того же?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...