Python paketlerini pip komutunu kullanarak requirements.txt'den yükseltin


115

Pip komutunu kullanarak tüm python paketlerimi required.txt dosyasından nasıl yükseltirim?

aşağıdaki komutla denendi

$ pip install --upgrade -r requirements.txt

Python paketlerinin sonuna sürüm numarası ( Django==1.5.1) eklendiğinden, yükseltilmiyor gibi görünüyorlar. Requirements.txt dosyasını manuel olarak düzenlemekten daha iyi bir yaklaşım var mı?

DÜZENLE

Andy'nin yanıtında bahsettiği gibi paketleri belirli bir sürüme sabitlenmiştir, bu nedenle paketleri pip komutuyla yükseltmek mümkün değildir.

Ancak bunu pip-toolsaşağıdaki komutu kullanarak başarabiliriz .

$ pip-review --auto

bu, tüm paketleri need.txt'den otomatik olarak yükseltir ( pip-toolspip install komutunu kullanarak kurduğunuzdan emin olun ).


7
Pip araçları harika çalışıyor - güncellenmiş sözdizimi pip-compile -U requirements.txt.
erikreed

Yanıtlar:


42

Hayır. Gereksinimler dosyanız belirli sürümlere sabitlenmiştir . Gereksinimleriniz bu sürüme ayarlanmışsa, bu sürümlerin ötesine geçmeye çalışmamalısınız. Eğer ihtiyacın varsa yükseltmek için, o zaman şartlar dosyasında sabitlenmemiş sürümlerine geçmek gerekir.

Misal:

lxml>=2.2.0

Bu, lxml'yi 2.2.0'dan daha yeni herhangi bir sürüme yükseltecektir.

lxml>=2.2.0,<2.3.0

Bu, lxml'yi 2.2.0 ile 2.3.0 arasındaki en son sürüme yükseltecektir.


3
Aşağıdakileri yapmakta yardımcı oldum. 1. venv silindi 2. Aynı ada sahip yeni bir tane oluşturuldu (tüm pip paketlerini temizlemenin yolu) 3.
Required

sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt hepsini==>=
philshem

82

Bu soruyu burada zaten cevapladım . İşte benim çözümüm:

Paketin ve requirements.txt dosyasını güncelleyerek yükseltme paketi için kolay bir yolu olmadığı için, ben yazdım pip-Güncelleyicisine da içinde sürümlerini güncelleyen requirements.txtdosyası seçilen paketler (veya tüm paketler) için.

Kurulum

pip install pip-upgrader

Kullanım

Virtualenv'inizi etkinleştirin (önemli, çünkü yükseltilmiş paketlerin yeni sürümlerini mevcut virtualenv'e de yükleyecektir).

cd proje dizininize girin ve ardından şunu çalıştırın:

pip-upgrade

Gelişmiş kullanım

Gereksinimler standart olmayan bir konuma yerleştirilmişse, bunları bağımsız değişken olarak gönderin:

pip-upgrade path/to/requirements.txt

Hangi paketi yükseltmek istediğinizi zaten biliyorsanız, bunları bağımsız değişken olarak göndermeniz yeterlidir:

pip-upgrade -p django -p celery -p dateutil

Yayın öncesi / yayın sonrası sürüme yükseltmeniz gerekiyorsa --prerelease, komutunuza bağımsız değişken ekleyin .

Tam açıklama: Bu paketi yazdım.


5
Harika! Böyle bir işlevin doğrudan
pip'te

5
Zarif!
Şuna

4
Bunu az önce kullandım ve bu f-stringlerden beri en iyi şey.
Pierre.Sassoulas

1
Harika bir araç. Teşekkür ederim.
mszaro

Çok kullanışlı bir araç! Ayrıca sabitlenmiş sürümleri de yükselten pur adında başka bir paket buldum
Gal Avineri

80

deneyebilirsin:

pip install --upgrade --force-reinstall -r requirements.txt

Ayrıca kurulu paketi yok sayabilir ve yenisini kurabilirsiniz:

pip install --ignore-installed -r requirements.txt

2
bu seçenekle aynı sürümü yeniden yüklüyor gibi görünüyor. Andy'nin yukarıdaki cevapta bahsettiği gibi, paketler belirli sürüme sabitlenmiştir.
abhiomkar

@abhiomkar haklısınız Aynı sürümü yeniden yüklemek istediğinizi düşündüm (belki arka plan düzeltmesi eklemek için)
Freelancer

1
İkinci komut, aradığım şeydi. Dikkat edin -Ive --ignore-installedaynı bayraklar ve tabii ki orada bir olması geçerli değil ,. Bu şekilde, kurulum sırasında herhangi bir sürüm düşürme meydana gelmez ve gereksinimlerin kurulumu tamamlandıktan sonra, kurulu paketleri kullanarak yükseltebilirsiniz pip-review --auto.
AXO

4

Öngörülebilir yapılara sahip olmak için tüm bağımlılıklarınızı dondurmanızı öneririm .

Bunu yaparken, tüm bağımlılıkları şu şekilde bir defada güncelleyebilirsiniz :

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

Yukarıda yapmış olan, sınamak paketlerin yeni bir dizi ile projenizi ve sonunda taahhütrequirements.txt deposuna dosyayı.


3

Ben de aynısını yapmak zorundaydım ... işi yapmak için bu küçük tek astarı kullandım:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

hangi:

  • packages=$(cat requirements.txt | sed 's/==.*//g') gereksinimler.txt dosyasında mevcut paket adlarının bir listesini oluşturur (sürümü kaldırarak).
  • echo $packages | xargs pip3 install -U daha sonra tüm paketleri argüman olarak yükseltmek için pip3'e geçirir.
  • freeze=$(pip3 freeze); Tüm güncel paket sürümlerini gereksinimler.txt için gereken biçimde alır
  • for p in $(echo $packages) sonra paket adlarını yineler
    • echo $freeze | grep -E "^${p}==" >> requirements.new paket sürüm satırını paketle eşleşen pip donma çıktısından alır ve yeni gereksinimler.txt dosyasına yazar

Bu, orijinal gereksinimler.txt sırasının korunmasına ek bir fayda sağlar. :)

Bu yardımcı olur umarım!


2

Bunu bash kullanarak yapamadığım için, sürüm içermeyen yeni bir gereksinim dosyası oluşturmak için bir python modülü yazdım ve onu kullandım:

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
    new_line = line[:line.index('==')]
    data2.write(new_line + '\n')
data2.flush()

Ardından yeni dosyadan kitaplıkları yükleyin pip install -U -r requirements-prod-no-version.pip

Son olarak sürümleri orijinal dosyaya göre dondurun pip freeze > requirements-prod.pip


2

Diğer bir çözüm, yükseltme gereksinimleri paketini kullanmaktır

pip install upgrade-requirements

Ve sonra çalıştırın:

upgrade-requirements

En son sürümlerinde olmayan tüm paketleri yükseltecek ve ayrıca sonunda güncellenmiş bir requirements.txt oluşturacaktır.


0
  • 1) den pip yüklü dosyaları yükseltmek için reqs.txt eklemek > = değiştirilmesi halinde == Bu yüklemek için pip söyleyecektir lib istediğiniz sürümden daha büyük veya ona eşit , burada istenen kitaplığın en güncel sürümünü yükleyerek

    1.a) ** Konu için cevabım ** Günlük yeniden başlatmaya py -m pip install -r reqs.txt ekleyerek ... veya doğal olarak yüklü kitaplarınızı güncelleyebilirsiniz. Andy Perfectly tarafından özetlendi

    -Bu iş parçacığına girmemin nedeni, sanal ortam temel pip'in nasıl güncelleneceği hakkında bilgi bulmaktı (genellikle benim için 10.0.03 ??

iki çözümden birini türetmeyi başardığım bir sorunu tatmin etme umuduyla

A. venv oluşturma || B. Gerekli kitaplıkların yüklenmesi

Andy sayesinde B ihtiyacını tatmin ettim

Pip ekleyerek > = versiyonunu talep de reqs.txt

yeni sanal ortamın somutlaştırılması üzerine || önceki Venv'in yeniden somutlaştırılması

  1. py -m venv devenv

yeni geliştirme ortamı kurmak için

  1. devenv\scripts\activate.bat

geliştirici ortamını etkinleştirmek için

  1. python -m pip install -r requirenments.txt

temel kitaplıkları yüklemek için

yeşil çıktı

Pip toplama > = 20.0.2 (-r requireenments.txt'den (satır 1)) Önbelleğe alınmış> https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-py3- none-any.whl

Mevcut kurulum bulundu: pip 10.0.1

Pip-10.0.1'i kaldırma:

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

Beyin Dökümü için özür dilerim, umarım bu birine yardımcı olur :)

Austin 👨‍🎤🚀🥊


0

İkinci cevap en kullanışlı olanıdır, ancak yapmak istediğim şey bazı paketleri kilitlerken diğerlerini en son sürümde (örneğin youtube-dl) almaktır.

Bir örnek requirements.txtşöyle görünecektir (~ uyumlu anlamına gelir):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

Ardından terminalde şu komutu kullanın: pip install --upgrade -r requirements.txt

Bu, Pillow'un 6.2.2'de kalmasını, isteklerin en son 2.22.x'e yükseltilmesini (mevcutsa) ve youtube-dl'nin en son sürümünün yüklenmemesini sağlar.


0

Sanırım en basit çözüm, requirements.txt dosyasını şu şekilde oluşturmaktır:

pip freeze | sed 's/==/>=/' > requirements.txt

0

Linux ve Mac'te aşağıdaki komutu kullanabilirsiniz:

kedi gereksinimleri.txt | kesim -f1 -d "=" | xargs pip kurulumu -U


-1

Django projenize herhangi bir şey yüklerseniz ve kurulumdan sonra gereksinim dosyanızı güncellemek isterseniz, bu komut gereksinim.txt dosyasını güncelleyebilir pip freeze> requirements.txt

Gereksinim dosyanız projenizde mevcut değilse, bu komutu yeni gereksinim.txt dosyası oluşturmak için kullanabilirsiniz pip freeze> requirements.txt


bu kötü bir fikirdir çünkü tüm gereksinimlerinizin gereksinimlerini de ekleyerek gereksiz yere büyük bir gereksinimler dosyası oluşturur. Daha sonra tek bir bağımlılığı güncellemeye karar verirseniz, bu paket nedeniyle gereksinimler dosyanıza başka hangi gereksinimlerin eklendiğini bilmediğiniz sürece muhtemelen sürüm çakışmaları yaşarsınız.
ayaklandı

-10

Requirements.txt dosyasını aşağıdaki gibi düzenleyip $ sh ./requirements.txt çalıştırıyorum

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

3
Bu, anti-modelin ideal bir örneğidir. Burada yanlış olan nedir: 1) Required.txt bir .txt dosyasıdır, ancak siz onu çalıştırılabilir yaptınız 2). Basit bir pip install -r requirements.txt komutu vardır. Bu nedenle, gereksinim.txt dosyasını yalnızca proje bağımlılıklarınızı listelemek için kullanabilirsiniz. 3) Paketlerin sürümlerini kullanmıyorsunuz. 4) Ortak bir model değil, diğer geliştiriciler onu nasıl kullanacakları konusunda hiçbir şey yapmazlar. 5) CI / CD boru hatlarıyla kullanımı zor. Lütfen bu örneği kullanmayın
Fannigurt
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.