2009-12-14 13 views
6

Tüm sistemlerin aynı python kurulumuna sahip olmasını ve yapılandırma sorunlarını kolaylaştırmasını sağlamak için tüm sistemlerimiz için ortak bir python kurulumuna sahibiz. Bu yükleme, paylaşılan bir sürücüde bulunur. Bu yüklemeyi paylaşan birden fazla platformumuz da var. Python'u derlerken, --exec-prefix configure seçeneğini ayarlayarak, platforma özgü platformlara özgü dosyaları ele geçiriyoruz.Tek bir yerde birden çok platform için python yumurtaları ile nasıl baş edebilirim?

Sorunum şu anda, platforma bağlı olan easy_install (veya başka bir şekilde) kullanarak bir yumurtayı yüklemek istiyorum. easy_install, yumurtayı, platformun platformun bağımsız kısmının site paketleri dizinine koyar. Yumurtanın adı, içinde platform var, bu yüzden çatışma olmamalı. Ancak python sadece bulduğu ilk şeyi yükler. (Yani, Solaris üzerinde Linux yumurtalarını yüklemeye çalışabilir). Easy-install.pth dosyasını değiştirmek, hangisini bulduğunu değiştirebilir, ancak bu oldukça işe yaramaz.

.egg dosyalarını platforma bağlı paketler dizinine taşıyabilir ve daha sonra bunları yüklemek için pkg_resources.require() yöntemini kullanabilirim (veya yolu el ile ayarlama). Ama sanki platformun yumurtadan beri olması gerekmiyormuş gibi görünüyor.

Python'un yumurtayı doğru platform için yüklemesini sağlayabileceğinden daha genel bir yolu var mı?

+0

Yumurta C uzantıları içeriyor mu, yoksa saf python mu? – codeape

+0

Evet, bir C uzantısı var. Aksi takdirde bu farketmez çünkü kod platforma bağlı olmaz. Özellikle merak ettiğiniz takdirde PyPerforce modülü. – Philbert

cevap

2

Bitirdiğim, platforma bağlı yumurtayı platforma özgü site paketleri dizinine (http://docs.python.org/install/index.html numaralı belgede belirtildiği gibi) el ile taşımaktı. Daha sonra, aynı dizinde, kurulacak yumurtaları listeleyen başka bir easy-install.pth yaptım.

easy_install exec_prefix'i onaylamanız ve platforma bağlı yumurtaları doğru "saf olmayan modül dağıtımı" konumuna getirmesi daha uygun olacaktır. Belki bunu easy_install milletinden isteyeceğim.

1

Python bunu mümkün kılacak kadar kancaya sahiptir, ancak muhtemelen bilge değildir. Bunu gerçekten uygulamak istiyorsanız, PEP 302'a bakın ve easy_install veya distribute kaynak kodunda hack yapmaya başlayın. Bildiğiniz gibi, easy-install.pth'da herhangi bir mantık yok.

Yüklemek istediğiniz Python paketlerini takip etmeniz çok daha iyi olacaktır. Örneğin, sadece istediğiniz sete bağlı olan kendi Python paketinizi yazabilirsiniz.

+0

Ve/veya paketleri sadece bu proje için yönetmek için python virtualenv paketini kullanın – RyanWilcox

2

Sanalenv'i deneyin ... http://pypi.python.org/pypi/virtualenv ... kendi python interpreter + site_packages klasörü ile yalıtılmış ortam oluşturmanıza yardımcı olur. Bu nedenle, yerel yollarda kurulu paketlerle hiçbir zaman anlaşmazlık yaşamazsınız.

0

Tüm platforma özgü paketleri yüklemek için "easy_install -m" kullanın, böylece sys.path üzerinde varsayılan bir sürüm yoktur. Bu şekilde, sürüm çözünürlüğü çalışma zamanında gerçekleşir ve platform bilgileri dikkate alınacaktır.

İlgili konular