У нас есть общая установка Python для всех наших систем, чтобы удостовериться, что каждая система имеет ту же установку Python и упрощать проблемы конфигурации. Эта установка расположена на общем диске. У нас также есть несколько платформ, которые совместно используют эту установку. Мы обходим конфликтующие определенные для платформы файлы путем установки - исполнительный префикс настраивает опцию при компиляции Python.
Моя проблема - то, что я теперь хочу установить яйцо с помощью easy_install (или иначе), который зависим от платформы. easy_install помещает яйцо в каталог пакетов сайта платформенно независимой части установки. Название яйца имеет платформу в нем, таким образом, не должно быть никакого конфликта. Но Python только загрузит первый, который он находит. (Так, на Солярисе это могло бы попытаться загрузить яйцо Linux). Изменение легкого-install.pth файла может измениться, какой это находит, но это довольно бесполезно.
Я могу переместить .egg файлы в зависевший платформой каталог пакетов и затем использовать pkg_resources.require (), чтобы загрузить их (или вручную скорректировать путь). Но кажется, как будто я не должен иметь к тому, так как платформа от имени яйца.
Есть ли еще универсальный способ, которым я могу удостовериться, что Python загрузит яйцо для корректной платформы?
What I ended up going with was manually moving the platform-dependent egg to the platform-specific site-packages directory (as specified at http://docs.python.org/install/index.html). Then I made another easy-install.pth in that same directory, listing the eggs to be installed.
This would be much more convenient if easy_install were to honour the exec_prefix and put platform-dependent eggs in the correct "non-pure module distribution" location. Perhaps I will request this from the easy_install folks.
Попробуйте virtualenv ... http://pypi.python.org/pypi/virtualenv ... поможет вам создать изолированную среду с собственным интерпретатором python + папка site_packages . Таким образом, у вас никогда не будет конфликтов с пакетами, установленными, скажем, по локальному пути.
Python имеет достаточно хуков, чтобы сделать это возможным, но, вероятно, это неразумно. Если вы действительно хотите реализовать это, посмотрите PEP 302 и начните взламывать easy_install
или распространять
исходный код. Как известно, есть На самом деле нет никакой логики в easy-install.pth
.
Вам, вероятно, будет намного лучше просто отслеживать, какие пакеты Python вы хотите установить. Например, вы можете написать свой собственный пакет Python, который зависит только от желаемого набора.
Используйте «easy_install -m», чтобы установить все пакеты, специфичные платформы, так что на Sys.Path. Таким образом, разрешение версии происходит во время выполнения, а информация платформы будет учитываться.