Ruby'nin paketleyicisinin / Perl'in kartonunun Python eşdeğerleri nelerdir?


94

Virtualenv ve pip hakkında bilgim var. Ancak bunlar paketleyici / kartondan biraz farklıdır.

Örneğin:

  • pip, betiğin mutlak yolunu yazar veya komut dosyasını etkinleştir
  • pip'in execalt komutu yok ( bundle exec bar)
  • virtualenv, Python yorumlayıcısını yerel bir dizine kopyalar

Her Python geliştiricisi virtualenv / pip kullanıyor mu? Python için başka paket yönetim araçları var mı?


4
Hayır, her Python kullanıcısı virtualenv kullanmaz. Şahsen hiç ihtiyacım olmadı.
Fred Foo

Tam olarak Ruby paketleyicisi gibi bir şeyin farkında değilim (şimdiye kadar bilmediğim BTW). Ne yapmak kullanmak VIRTUALENV hem kullanmaktır ve pip ve Google'da ilk ne bulursak dağıtım sistemi veya distutils veya :) Ben de bir cevap merak ediyorum ama bu çoğu zaman benim çözümdür - Setuptools'u.
brandizzi

pipenvve shovelaşağıda belirtilenler, bu soru sorulduğundan beri daha modern seçimlerdir.
Jim Meyer

Ne pipenv ne de kürek eşdeğer değildir. Kürek, toplayıcı gibi bir şey değildir, daha çok tırmık gibidir. Python bağımlılık yönetimi oldukça geride kaldı. Bir gün (gerçi pip birleştirilecek olacak pypi.org/project/pipfile ...)
nomas Prime

Yanıtlar:


72

Bundler hakkında okuduklarıma göre - virtualenv olmadan pip sizin için gayet iyi çalışacaktır. Bunu normal gem komutu ve paketleyici arasında bir şey olarak düşünebilirsiniz. Pip ile yapabileceğiniz yaygın şeyler:

  1. Paketleri yükleme (gem kurulumu)

    pip install mypackage
    
  2. Bağımlılıklar ve toplu yükleme (gemfile)

    Muhtemelen en kolay yol, pip'in requirements.txt dosyalarını kullanmaktır. Temel olarak, olası sürüm kısıtlamaları olan gerekli paketlerin basit bir listesidir. Şunun gibi görünebilir:

    nose==1.1.2
    django<1.3
    PIL
    

    Daha sonra bu bağımlılıkları yüklemek istediğinizde şunları yaparsınız:

    $ pip install -r requirements.txt
    

    Tüm mevcut paketlerinizi gereksinimler dosyası sözdiziminde görmenin basit bir yolu şunları yapmaktır:

    $ pip freeze
    

    Bu konuda daha fazla bilgi bulabilirsiniz burada .

  3. Yürütme (paketleyici yürütme)

    Yürütülebilir dosyalarla birlikte gelen tüm python paketleri genellikle kurulumdan sonra doğrudan kullanılabilir (özel kurulumunuz yoksa veya özel bir paket değilse). Örneğin:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. Önbellekten yüklemek için mücevher paketleri (paketleyici paketi)

    Orada pip bundleve pip zip/unzip. Ama pek çok kişinin kullandığından emin değilim.

ps Ortam izolasyonunu önemsiyorsanız, virtualenv'i pip ile birlikte de kullanabilirsiniz (yakın arkadaştırlar ve birlikte mükemmel çalışırlar). Varsayılan olarak pip, yönetici hakları gerektirebilecek sistem genelinde paketleri yükler.


46
Paketleyici ile ilgili harika olan şey, virtualenv bölümünün tam olarak entegre olması ve çoğu durumda yönetici haklarının gerekmemesidir. Aslında, paket, küresel olarak ihtiyaç duyulan tek mücevher olabilir. bundle install --path vendorher şeyi yerel olarak yükler ve bunu bundle execanlayacak kadar akıllıdır. Açık ortam değişikliklerine gerek yok.
Debilski

11
3. noktanın doğru olduğunu sanmıyorum. Sadece çalıştırılabilir bir Ruby çalıştırma, birlikte veya olmadan yapılabilir bundle exec. Bütün mesele, çalıştırılabilir dosyayı çalıştırmadan önce bundle execortamı değiştirmesidir Gemfile. bundle execVirtualenv olsa da Pip'in eşdeğeri yoktur .
Sean Mackesey

@SeanMackesey, virtualenv ortamını her çalıştırdığınızda, hemen ortamın içine girersiniz, örneğin python, genel olarak kurulu değil, ortamdaki olanı işaret eder, pythonpath, env ile ilgili olarak doğrudur, tüm uygulamalar da bu ortamdan çalışır.
Denys Shabalin

8
Bundler ilgili en önemli şey neredeyse her boyutta HERHANGİ yakut projesi bir olacağı hemen hemen garanti can, artık bir defacto standart olduğunu Gemfile's kök oturdu ve mümkün bundle installve sen iyi gitmek veya bundle --deployment've Makinenin üzerinde ruby'nin gerekli sürümüne sahip olması koşuluyla, yapacak çok az şeyi olan bir sunucuda çalışır. Python'un bir eşdeğeri yoktur. Araçlar oradadır, kültürel her yerde bulunmaz.
ocodo

17

Bundler ile benzer bir arayüze sahip olan pipenv'i kullanabilirsiniz .

$ pip install pipenv

Pipenv, virtualenv'yi otomatik olarak oluşturur ve bağımlılıkları Pipfileveya Pipfile.lock.

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

Virtualenv kapsamı ile komut çalıştırabilirsiniz bundle exec.

$ pipenv run python3 -c "print('hello!')"

3

Bir klon toplayıcı var .

Şu anda pip olan sürüm, requirements.txtzaten sahip olduğunuz dosyayı okur , ancak çok eski. Aynı zamanda tamamen eşdeğer de değil: a yapmakta ısrar ediyor virtualenv. Bundler, fark ettim, sadece hangi paketlerin eksik olduğunu yükler ve size sudo şifrenizi sistem dizinlerinize yükleme veya yeniden başlatma seçeneği sunar, ki bu pbundler'ın bir özelliği gibi görünmüyor.

Bununla birlikte, git üzerindeki sürüm, Bundler'in davranışına çok daha yakın olacak şekilde neredeyse tamamen yeniden yazılmıştır ... bir "Cheesefile" içermesi ve artık gereksinimleri.txt'yi desteklememesi dahil. Bu talihsiz bir durumdur, çünkü requirements.txt pythonland'de fiili standarttır ve hatta onu standartlaştırmak için Resmi BDFL damgalı çalışma bile vardır . Bu yürürlüğe girdiğinde, pbundler gibi bir şeyin fiili standart olacağından emin olabilirsiniz. Ne yazık ki, henüz oldukça istikrarlı bir şey Bildiğim kadarıyla (ama olur aşk yanlışı kanıtlanmış).


Bu proje kaybolmuş görünüyor. Şiiri düşünün: stackoverflow.com/a/61771381/115075
bb.

1

Bir tane yazdım - https://github.com/Deepwalker/pundler . PIP'de pundleadı zaten alınmıştı.

requirements(_\w+)?.txtDosyaları istediğiniz bağımlılıklar olarak kullanır ve frozen(_\w+)?.txtdonmuş sürümleri olan dosyalar oluşturur .

Hakkında (_\w+)?bir şey - bu ENV olduğunu. PUNDLEENV=testRequirements_test.txt oluşturabilir ve ardından bu dep'leri çalıştırmanızda Required.txt ile birlikte kullanabilirsiniz.

Ve virtualenv hakkında - birine ihtiyacınız yok, paketleyicinin ilk kafada aldığı şey bu.


1

Python Poetry, 2020 itibariyle (ve zaten 2018'den beri) Ruby paketleyicisine en yakın olanıdır. Zaten iki yıldan daha eski, hala çok aktif ve harika belgelere sahip. Biri curl-pipe-python-style'ın önerilen kurulum yolu olduğundan şikayet edebilir , ancak alternatifler vardır, örneğin macOS'ta homebrew.

Sahne arkasında sanal ortamları kullanır (paketleyicinin aksine), ancak bir kilit dosyası sağlar ve kullanır, alt bağımlılıkları yönetir, belirtilen sürüm kısıtlamalarına uyar ve eski paketlerin otomatik olarak güncellenmesine izin verir. Favori kabuğunuz için otomatik tamamlama bile var.

Bir pyproject.toml dosyası kullanımıyla, aynı zamanda paketleyiciden biraz daha ileri gidiyor (bir gemspec'e daha yakın. Aynı zamanda JavaScript'in ve TypeScript'in npm ve iplik ile karşılaştırılabilir).

Poetrify (tamamlayıcı bir proje), gereksinimleri şiir için gereksinimleri.txt'den pyproject.toml'ye dönüştürmeye yardımcı olur.

poetry export -f requirements.txt > requirements.txtDiğer takımlar için buna ihtiyacınız varsa (veya beklenmedik durum geri dönmek istiyorsanız), kilit dosyası gereksinim.txt olarak dışa aktarılabilir .


1

Shovel'in bir bakmaya değer olduğunu söyleyebilirim . Rake'in Pythonish versiyonu için özel olarak geliştirilmiştir. Projede çok fazla taahhüt faaliyeti yok, ancak istikrarlı ve kullanışlı görünüyor.


0

Hayır, tüm geliştiriciler virtualenv ve / veya pip kullanmaz, ancak birçok geliştirici bu araçları kullanır / tercih eder

Ve şimdi, paket geliştirme araçları ve farklı ortamlar için asıl sorunuz bu. Aynı amaç için Buildout ( http://www.buildout.org/en/latest/ ) gibi diğer araçları da kullanın , yönettiğiniz her proje için ortamınızı Python oluşturma sistemini izole edin. Bir süredir bunu kullanıyorum, ama şimdi değil.

Python'da proje başına bağımsız ortamlar Ruby'deki durumdan biraz farklıdır. Benim durumumda pyenv ( https://github.com/yyuu/pyenv ) kullanıyorum, bu rbenv gibi ama Python için. proje başına python ve virtualenv'lerin farklı sürümleri ve bu yalıtılmış ortamlarda pip veya easy-install (gerekirse) kullanabilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.