SORU
2 ŞUBAT 2013, CUMARTESİ


Nasıl kolayca Python modülü bağımlılıkları olan Python yazılım dağıtmak için? Unix üzerinde Python paket kurulumu sıkıntılarınızı

Amacım bağımlılıklar gibi yaygın olarak kullanılan diğer bazı Python paketleri olan bir Python paketi dağıtmaktır. Benim paket pandalar, scipy ve numpy gibi iyi yazılmış, Pypi endeksli paketler bağlıdır, ve bazı sürümlerinde veya bunlardan daha gerekli setup.py örneğin "numpy ^ belirtir . = 1.5".

Son derece sinir bozucu ve olan Unıx meraklısı kullanıcılar için neredeyse imkansız olduğunu buldumdeğilpaket yöneticisi kullanımı kolay olması gerekiyor kullanırken bile benimki gibi bir paket yüklemek için Python ambalaj eğer Python yazmayı bilseler bile) uzmanlar. Eğer birini sunabilir bu sancılı süreç için bir alternatif varsa, ya da eğer benim deneyim sadece Python paketleme ve dağıtım çok zor mevcut durumu yansıttığını merak ediyorum.

Kullanıcıların sistem üzerine paket indirme varsayalım. En yüklemek için", kullanarak gibi bir şey. "safça çalışacağız

$ python setup.py install

Eğer Python paketleri yükleme yönergeleri google için bu durum geliyor. Bu çoğu Unıx/Linux sunucularda root erişimi yok çünkü kullanıcıların büyük çoğunluğu için başarısız olur. Daha fazla arama ile, "--prefix" seçeneği deneyin: . öğreneceksiniz

$ python setup.py install --prefix=/some/local/dir

Kullanıcılar Python ambalaj inceliklerini farkında olmadığı için, *örneğin* 9 8 ** için bir argüman olarak keyfi bir dizin seçin. Yine, çoğu kullanıcı bu ayrıntıları farkında değil, çünkü diğer tüm Python paketleri bulunduğu temiz bir şekilde küratörlüğünü bir dizin olmayacak. Eğer başka bir paket "" geçmesi olabilir "~/software/myotherpackage" ve nasıl PYTHONPATH ve diğer komplikasyonlar sinir bozucu hack götürecek yolda. tahmin edebileceğiniz myotherpackage yüklediklerinde

Devam eden yükleme işlemi, çağrı "setup.py install" "--prefix" de başarısız bir kez kullanıcılar çalışın paketi bile çıktı zamandır yüklü doğru, beri bağımlılıklarını eksik olabilir (örneğin pandalar, ya da numpy scipy) ve bir Paket Yöneticisi değil kullanılan. Bu paketleri tek tek yüklemek için çalışacağız. Hatta eğer başarılı, paketleri olacak kaçınılmaz değil PYTHONPATH nedeniyle standart olmayan dizinler verilen "--prefix" ve hasta kullanıcılara serpmek ile değişiklikler onların PYTHONPATH get bağımlılıklar için görünür.

Bu aşamada, kullanıcılar "easy_install", Genel Müdür, gibi bir Paket Yöneticisi yazılımı yüklemek için kullanın ve bağımlılıkları dikkatli olması gerektiğini Python anlayışlı bir arkadaş tarafından söylendi olabilir. Zor olabilir "easy_install", yükledikten sonra çalışacağız:

$ easy_install setup.py 

Bu da kullanıcılar yine genellikle yazılım genel üretim Unıx sunucularda yüklemek için izni olmadığı için başarısız olur. Daha fazla okuma ile "--user" seçeneği hakkında bilgi edinin, ve çalışacağız:

$ easy_install setup.py --user 

Hata:

usage: easy_install [options] requirement_or_url ...
   or: easy_install --help

error: option --user not recognized

easy_install net bir şekilde açıklayan seçenek online sayfaları vardır --user seçenek yok neden son derece şaşkın olacaklar. easy_install en son sürümü yükseltme alabilir ve yine de başarısız.

Devam ediyorlar ve Python Ambalaj bir uzmana danışmak, olduğunu fark edecekleriki versiyonueasy_install, iki isimli karışıklık, ama bir kısmı en üst düzeye çıkarmak için "easy_install" "" ve diğer tarafı "". setuptools dağıtmak Bu olur tek "easy_install" "distribute" destekler "--user" ve büyük çoğunluğu sunucular/sys yöneticileri yükleyin "setuptools"easy_install yerel kurulum mümkün olmayacaktır. "distribute" "setuptools" arasındaki bu ayrımlar ve Python Paket Yöneticisi uzman olmayan kişiler için anlaşılması zor anlamsız olduğunu unutmayın.

Bu noktada, yazılım paketini yüklemek için çalışan kararlı, anlayışlı ve sabırlı hatta çoğu kullanıcılarının -ve haklı olarak çok kaybederdim! Yazılı oldu bir yazılım yüklemek için Python istediler, sanat Python paket dağıtımı devlet uzman olmak için değil, ve bu çok kafa karıştırıcı ve karmaşık. PES ve zaman boşa sinirli olurlar.

Devam edin ve daha fazla isteyen kullanıcılar küçük azınlık uzmanları easy_install yerine pip/virtualenv kullanmaları gerektiğini söyledi olacaktır Python. Yükleme pip virtualenv ve endam dışarı nasıl bu araçlar çalışmıyor ve nasıl onlar farklı geleneksel "python setup.py" "easy_install" çağrıları olduğunu kendisi de zaman alıcı ve zor, ve daha fazla istemek için gelen kullanıcılar istedim yüklemek için basit bir parça Python yazılımı ve kullanımı. Hatta o kim bu yolu takip edilecektir karışık olarak verilip ne olursa olsun onlar bağımlılıkları yüklü easy_install setup.py install --prefix hala kullanılabilir pip/virtualenv ya da eğer her şeye ihtiyaçları için yeniden sıfırdan.

Bu sorun, söz konusu paketlerin bir veya daha fazla varsayılan olandan Python'un farklı bir sürümünü yüklemeden bağlıdır şiddetlenir. Eğer Python Paket Yöneticisi sağlama zorluğu ilgili Python 2 içinde istediğiniz ve gerekli bağımlılıkları yüklü olan Python sürümünü kullanıyor.x directory ve Python 2.y, kesinlikle bu aşamada PES edeceklerini kullanıcılar için sonsuz sinir bozucu olacaktır.

Daha basit bir yol kullanıcıları Python paketleri, yolları ve yerleri bu teknik detaylara dalmak ister Python yazılım yükleme var mı? Örneğin, ben bir büyük Java kullanıcı, ama ben biraz Java araçları bazen, sakın hatırlama hiç sahip endişelenecek X ve Y bağımlılıklar Java yazılım olduğumu yükleme, ve hiç bir fikrim yok nasıl Java paketi yönetmeye çalışır (ve mutluyum ki ben ... ben sadece aracı olanlar için yazılmış Java.) Hatırladığım kadarıyla eğer bir Kavanoz yüklemek istiyorsanız, sadece almak ve işe eğilimindedir.

Python için bir eşdeğer var mı? Kullanıcılar tüm bu bağımlılıkları ve sürümleri peşine düşmek zorunda bağlı olmayan bir şekilde yazılım dağıtmak için bir yol? Belki de sadece bir ikili olarak indirilebilir bir şey kendi kendine yeten, tüm uygun paketleri derlemek için bir yol?

Bu hayal kırıklığı bile sorun daha basit bir hale getirir anlayışlı Unıx kullanıcıları için bir paket dağıtma dar hedefi ile gerçekleştiğini vurgulamak için platform sorunları, vb çapraz endişesi olmasın istiyorum. Sanırım bu kullanıcılar Unıx anlayışlı, ve belki hatta Python biliyorum, ama değil, sadece farkında (ve olmak istemiyorum haberdar) hakkında ins ve çıkışları Python ambalaj ve sayısız iç komplikasyonlar/rekabet farklı paket yöneticileri. Bir rahatsız edici özelliği bu sorunu daha da güçlendiriyor bile tüm Python paket bağımlılıkları iyi bilinen, iyi yazılmış ve bakımlı Pypi-mevcut paketleri gibi Pandalar, Scipy ve Numpy. Düzgün paketi oluşturmuştur olmayan bazı karanlık bağımlılıkları kalacaktım gibi değil: çok güveniyor olabilecek en genel paket kullanıyordum.

Bu konuda herhangi bir yardım veya tavsiye büyük takdir edilecektir. Bence Python harika bir dil ile büyük kütüphaneler, ama bulmak neredeyse imkansız dağıtmak için yazılım yazmak (bir zamanlar sahip bağımlılıkları) bir şekilde bu kolay insanlar için yerel olarak yükleyin ve çalıştırın. Yazdığım program yazılımı kullanmak için Python Kütüphanesi, kullanıcıların tek bir program olarak çalışan bir komut dosyası çalıştırılabilir bir yazılım olmadığını açıklığa kavuşturmak istiyorum. Teşekkürler.

CEVAP
2 ŞUBAT 2013, CUMARTESİ


Biz de numpy, scipy ve diğer PyPİ paketleri bağlı olan yazılım projeleri geliştirmek. Eller aşağı, en iyi aracı orada uzak yüklemelerini yönetmek için şu anda kullanılabilir zc.buildout.çokkullanımı kolay. Kendi web sitesinden bir önyükleme komut dosyası indirin ve paketi ile dağıtın. "Yerel dağıtım", normalde paketini yüklemek için açıklar buildout.cfg adı verilen yerel dosya. bir yazıyorsun Gemi hem bootstrap.py dosya buildout.cfg ile paket kullandığımız MANIFEST.in dosya bizim python paketleri zorlamak almasi bu iki dosya ile zip veya tar dağıtılmış tarafından PyPİ. Kullanıcı unpackages, iki komutları yürütmek gerekir:

$ python bootstrap.py # this will download zc.buildout and setuptools
$ ./bin/buildout # this will build and **locally** install your package   deps

Paket derlenir ve tüm bağımlılıkları yüklüyerel olarakkullanıcı paketi yükleme bile ek bir özellik olan root, ihtiyacı yok demektir., Komut dosyaları (normal) kullanıcı sadece sonra onları yürütmek mümkün olacak ./bin, altına yerleştirilir. zc.buildout beklediğiniz her şey kutunun dışında çalışır, PyPİ ile etkileşim için setuptools kullanır.

Sen-ebilmek uzatmak zc.buildout oldukça kolay eğer tüm bu güç yeterli değil - oluşturduğunuz sözde "yemek tarifleri" yardımcı olacak bir kullanıcı oluşturmak için ekstra yapılandırma dosyaları indir diğer şeyler arasında net veya örneğini özel programlar. zc.buildout buildout nasıl kullanılacağı ve genişletmek için nasıl sitesi detayları açıklayan bir video eğitimi içerir. Projemiz 56* *bilimsel kullanım için paketleri dağıtmak için buildout geniş kullanımı yapar. Eğer isterseniz, diğer insanlar oluşturmak ve onları yerel olarak zc.buildout kullanarak yüklemek için python paketlerini Kur nasıl bizim geliştiriciler için ayrıntılı talimatlar içeren visit the following page lütfen.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • WK

    WK

    9 Ocak 2006