2011-06-22 14 views
8

İşverenim, iç ünite/sistem testi için kullandığımız özel bir modülü ; ancak, bu modülün yazarı artık burada çalışmıyor ve bazı aygıtları onunla test etmem istendi.Modülün eski bir sürümünü kullanmak için python'u zorla (şimdi kurduğumdan daha fazla)

Sorun, pyfoo'un twisted (v8.2.0) eski bir sürüm gerektirmesi ve 33 farklı dosyada twisted içeri aktarmasıdır. V11.0.0 altında pyfoo ünite testlerini çalıştırmayı denedim ve TCP SYN paketleri 'u bile göremiyorum. Maalesef, lab linux sunucumda zaten yüklü twisted v11.0.0 var ve buna bağlı olarak kendi kodum var.

Bunun etrafında bir yol beynimi bozucu edilmiş, ama sadece şu seçeneklerle gelebilir:

Seçenek A. Python'un yeni bir sürümünü yükleyin, virtualenv'u yükleyin ve twisted'un eski bir sürümünü virtualenv altına yükleyin. Bu yeni sürüm python altında sadece pyfoo gerektiren testleri çalıştırın.

Seçenek B. Aşağıdaki dosyaların 33'ünü aşağıdaki gibi düzenleyin: DIR = '../'; sys.path.insert(0, DIR) ve python'un eski sürümünü kaynağın altındaki uygun dizine yükleyin.

Seçenek C. pyfoo numaralı telefonu düzeltmek için girişimi yapmaya çalışın. V11.0.0

Eksik olduğum seçenekler var mı? Yukarıda A Seçeneği'nin yanı sıra bu sorunu çözmenin daha zarif bir yolu var mı?


SON-NOTLAR:
  • ünite testleri yerel laboratuar sunucularından birine bağlanmak ve temel telnet işlevselliğini
  • Bu seçenek egzersizleri argümanının uğruna pyfoo diyelim

    1. Neredeyse bir marş değil ... pyfoo önemsiz ve bu çalışma için kısa bir süre var.
  • +0

    Linux'ta? Chroot kullan! : D – tMC

    +0

    @tMC, I * düşünüyorum * Ne söylediğini görüyorum, ama açık olmamı sağlayın ... '/ chroot/python/site-pack' içinde twisted sürüm 0.8.2'yi kurduğumu ve sonra testleri yürütmeden önce bu dizine chroot 'chroot'? –

    +0

    Gerçekten sizin env ile çalışıp çalışamayacağını bilmiyorum ama chroot'u bir çeşit sanallaştırma olarak düşünün. Python'u bir chroot'ta çalıştırmak için, python'un bağımlı olduğu tüm libs'lere, belki bir proc mount'a vb. Sahip olmanız gerekir. Gerçekten sadece bunu düşündüm çünkü birisi gerçek bir VM çözümü önerdi. – tMC

    cevap

    20

    seçenek B'nin daha iyi versiyonu değiştirmek şeklinde olur

    import twisted 
    

    bükülmüş doğru sürümü için işlemleri yapacak olan

    import pkg_resources 
    pkg_resources.require("Twisted==8.2.0") 
    import twisted 
    

    tarafından bu kadar uzun Yüklendikten olarak, ithal ve aksi bir durum oluşturur edilecek. Bu daha taşınabilir bir çözümdür.

    pkg_resources.require çağrılmadan önce twisted alırsa, bu işe yaramaz (yine de B seçeneğinin başka bir varyasyonu da olmaz); twisted zaten olacak sys.modules

    OP Düzenleme: Minör sözdizimi düzeltme başına

    +1

    Ne olursa: 1) Yüklü bir paketin iki sürümü var, 2) modül '' s' çağrısı'ndan hemen önce 'sys.modules'de mevcut değil ama VersionConflict istisnasını alıyorum (yani bir sürüm talep ediyorum fakat başka bir tane zaten mevcut ve istisnaya neden oluyor)? – Eugen

    +0

    @Eugen: Lütfen bunu yeni bir soru olarak sorun ve yeniden üretme adımlarını da ekleyin. – SingleNegationElimination

    +0

    Burada açıklanan geçici çözümü kullanarak sorunumu çözdüm: [geçici çözüm] (http://bugs.python.org/setuptools/issue139). Diğer her şeyi almadan önce modüllerime \ _ \ _ require \ _ \ _ eklemek zorunda kaldım .. – Eugen

    1

    Senin durumunda en iyi olanı size söyleyemem, ancak dikkate almak mümkün olabilir:

    Seçenek D: (. Örn Windows 7 ile) sanal makine çalıştırmak

    E seçeneği: başka bir makinede bükülmüş piton eski sürümünü yükleyin/

    +0

    Bunlar mümkündür, ancak başka bir VM yüklemek için zaman genellikle yaklaşık 30 dakikadır (en azından benim için) ... tüm sahip olduğum VirtualBox ... –

    0

    çalışmıyor SingleNegationElimination çözümü, İçe tüm 33 örneklerini değiştirmek gerekmez unutmayın ise; giriş noktalarında sys.path'u değiştirmeniz yeterlidir; Örneğin. Sadece modülünüzün __init__.py dosyalarını hedefleyebilirsiniz.

    Burada örnek olarak ekleyebilirsiniz.

    import sys 
    sys.path.insert(0, DIR) 
    
    İlgili konular