2009-12-14 7 views
6

Mamy wspólną instalację pythona dla wszystkich naszych systemów, aby zapewnić, że każdy system ma tę samą instalację pythona i ułatwia problemy konfiguracyjne. Ta instalacja znajduje się na współużytkowanym dysku. Mamy także wiele platform, które współużytkują tę instalację. Występują konflikty między plikami specyficznymi dla platformy, ustawiając opcję --exec-prefix configure podczas kompilowania Pythona.W jaki sposób radzić sobie z jajami Pythona dla wielu platform w jednym miejscu?

Moim problemem jest to, że chcę teraz zainstalować jajko za pomocą easy_install (lub w inny sposób) zależnego od platformy. easy_install umieszcza jajko w katalogu site-packages niezależnej od platformy części instalacji. Nazwa jaja zawiera platformę, więc nie powinno być żadnych konfliktów. Ale python załaduje tylko pierwszą znalezioną. (W systemie Solaris może więc spróbować załadować jądro Linuxa). Modyfikowanie pliku easy-install.pth może zmienić to, co znajdzie, ale to całkiem bezużyteczne.

Mogę przenieść pliki .egg do katalogu pakietów zależnego od paczek, a następnie użyć pkg_resources.require() w celu ich załadowania (lub ręcznego dostosowania ścieżki). Ale wydaje się, że nie powinienem, ponieważ platforma jest w nazwie jaja.

Czy jest jakiś ogólny sposób, w jaki sposób mogę zapewnić, że Python załaduje jaj na właściwą platformę?

+0

Czy jajko zawiera rozszerzenia C, czy jest to czysty pyton? – codeape

+0

Tak, istnieje rozszerzenie C. W przeciwnym razie nie miałoby to znaczenia, ponieważ kod nie byłby zależny od platformy. W szczególności jest to moduł PyPerforce, na wypadek, gdybyś był ciekawy. – Philbert

Odpowiedz

2

Do tego doszedłem z ręcznym przeniesieniem jaja zależnego od platformy do specyficznego dla platformy katalogu paczek-witryn (jak określono w http://docs.python.org/install/index.html). Potem zrobiłem kolejny easy-install.pth w tym samym katalogu, wymieniając jaja do zainstalowania.

Będzie to o wiele wygodniejsze, jeśli easy_install będzie honorować exec_prefix i umieszczać jaja zależne od platformy w poprawnej lokalizacji "nie-czystej dystrybucji modułów". Być może poproszę o to od osób z easy_install.

1

Python ma wystarczającą liczbę haków, aby to umożliwić, ale prawdopodobnie nie jest to rozsądne. Jeśli naprawdę chcesz to zaimplementować, spójrz na PEP 302 i zacznij hakować na kodzie źródłowym easy_install lub . Jak wiecie, tak naprawdę nie ma żadnej logiki w easy-install.pth.

Prawdopodobnie lepiej byłoby po prostu śledzić, które pakiety Python chcesz zainstalować. Możesz na przykład napisać własny pakiet Pythona, który zależy od pożądanego zestawu.

+0

I/Lub użyj pakietu pythona virtualenv do zarządzania pakietami tylko dla tego projektu – RyanWilcox

2

Spróbuj virtualenv ... http://pypi.python.org/pypi/virtualenv ... pomaga w tworzeniu izolowanego środowiska dzięki swojemu własnemu interpreterowi python + folder site_packages. Dzięki temu nigdy nie będziesz mieć żadnych konfliktów z pakietami zainstalowanymi na przykład w lokalnej ścieżce.

0

Użyj "easy_install -m", aby zainstalować wszystkie pakiety specyficzne dla platformy, tak, że nie ma domyślnej wersji na sys.path. W ten sposób rozdzielczość będzie miała miejsce w środowisku wykonawczym, a informacje o platformie będą brane pod uwagę.

Powiązane problemy