Bagaimana saya bisa memutakhirkan paket tertentu menggunakan pip dan file persyaratan?

437

Saya menggunakan pip dengan file persyaratan, dalam virtualenv, untuk proyek Django saya. Saya mencoba untuk meningkatkan beberapa paket, terutama Django sendiri, dan saya mendapatkan kesalahan tentang konflik kode sumber:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3))

Itu setelah memperbarui nomor versi Django dari 1.2.3 ke 1.2.4 di file persyaratan saya. Saya menggunakan perintah ini untuk benar-benar melakukan peningkatan:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>

Saya tidak dapat menemukan bendera apa pun yang memicu pengunduhan total paket. Saya bahkan mencoba menjalankan perintah uninstall terlebih dahulu, kemudian instal tetapi tidak ada dadu. Mungkin saya melewatkan sesuatu?

gcaprio
sumber
1
Silakan periksa jawaban @ dr-jimbob karena versi terbaru dari pip benar-benar akan memperbarui semua dependensi lain yang bergantung pada paket yang Anda tingkatkan.
Lokesh Meher

Jawaban:

61

Saya tidak yakin apakah itu benar-benar masalah Anda, tetapi dalam kasus saya, saya tidak dapat memutakhirkan Django ke 1.2.4 - Saya selalu selesai dengan versi 1.2.3, jadi saya mencopot Django dengan:

<virtualenv>/bin/pip uninstall Django

Lalu saya menghapus <virtualenv>/build/Djangodirektori dan akhirnya saya menginstal versi yang tepat dengan:

<virtualenv>/bin/pip install Django

Semoga ini bisa membantu.

Marcin Świerczyński
sumber
53
Ini bukan praktik terbaik. Gunakan pip install Django -Uatau pip install Django --upgradeseperti yang dijelaskan dalam jawaban @ JoeyG.
Ahmad
@Ahmad setuju. Seharusnya ada proses pembaruan yang lancar di pip dan virtual env.
Parth Joshi
1274

Saya menjalankan perintah berikut dan ditingkatkan dari 1.2.3 ke 1.4.0

pip install Django --upgrade

Pintasan untuk peningkatan:

pip install Django -U

Catatan : jika paket yang Anda tingkatkan memiliki persyaratan apa pun, perintah ini juga akan memutakhirkan semua persyaratan ke versi terbaru yang tersedia. Di versi pip terbaru, Anda bisa mencegah perilaku ini dengan menentukan--upgrade-strategy only-if-needed . Dengan flag itu, dependensi tidak akan ditingkatkan kecuali versi yang terinstal dari paket dependen tidak lagi memenuhi persyaratan paket yang ditingkatkan.

JoeyG
sumber
7
Ini untuk saya memperbarui semua paket saya dan benar-benar mengacaukan semuanya !!!! Status dokumen: --upgrade semua paket ke versi terbaru yang tersedia. Apakah ini benar atau apakah saya melakukan sesuatu yang salah?
Prometheus
4
@OrbiterFleet Saya perlu memperbarui "permintaan" jadi saya lakukan pip install Requests --upgradedan hanya "permintaan" yang ditingkatkan. Deskripsi mengatakan "tingkatkan semua paket yang ditentukan " ketika saya melihat dokumen.
Harperville
31
PERHATIAN, ini juga memperbarui semua dependensi dan dapat mengacaukan segalanya. opsi terbaik adalah menghapus dan menginstal ulang paket.
marcelosalloum
3
untuk meningkatkan penggunaan paket spesifikpip install --upgrade django==1.4.0
whale_steward
ini harus menjadi jawaban yang benar sesuai dengan pertanyaan atau pertanyaan itu sendiri salah.
int soumen
51

menurut pip docs contoh 3

pip install --upgrade django

tetapi berdasarkan pengalaman saya, menggunakan metode ini juga akan memutakhirkan paket apa pun yang terkait dengannya. contoh:

Asumsikan Anda ingin memutakhirkan somepackageyang mengharuskan django >= 1.2.4menggunakan metode semacam ini, ia juga akan memutakhirkan somepackageDAN djangoke pembaruan terbaru. Untuk amannya lakukan:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4

Melakukan hal ini akan meningkatkan somepackagedan menjaga Django ke versi 1.2.4

whale_steward
sumber
Bagus menangkap tetapi penjelasan Anda membingungkan karena Anda mulai dengan djangosebagai paket utama kemudian dalam contoh yang Anda gunakan somepackagedan kemudian gunakan djangosebagai dependensi.
Long
34

Perintah pintasan untuk --upgrade:

pip install Django --upgrade

Adalah:

pip install Django -U
Aaron Lelevier
sumber
7
Bagaimana dengan mengedit jawaban yang ada untuk menambahkan sedikit informasi ini daripada jawaban (tidak lengkap)?
1
@ aan harap sarankan info tambahan apa yang menurut Anda harus ditambahkan dalam "sunting yang disarankan". Terima kasih
Aaron Lelevier
4
Maksud saya Anda dapat mengedit jawaban yang diberikan oleh JoeyG, menambahkan opsi pintasan yang Anda berikan dalam konteks di sana.
1
17

Jika Anda meningkatkan paket, yang lama akan dihapus.

Cara mudah untuk melakukan ini adalah dengan menggunakan pip-upgrader ini yang juga memperbarui versi dalam requirements.txtfile Anda untuk paket yang dipilih (atau semua paket).

Instalasi

pip install pip-upgrader

Pemakaian

Aktifkan virtualenv Anda (penting, karena itu juga akan menginstal versi baru dari paket yang ditingkatkan dalam virtualenv saat ini).

cd ke direktori proyek Anda, lalu jalankan:

pip-upgrade

Penggunaan tingkat lanjut

Jika persyaratan ditempatkan di lokasi yang tidak standar, kirimkan sebagai argumen:

pip-upgrade path/to/requirements.txt

Jika Anda sudah tahu paket apa yang ingin Anda tingkatkan, cukup kirimkan sebagai argumen:

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

Jika Anda perlu meningkatkan ke versi pra-rilis / pasca-rilis, tambahkan --prereleaseargumen ke perintah Anda.

Pengungkapan penuh: saya menulis paket ini. Semoga ini bisa membantu.

Simion Agavriloaei
sumber
1
apakah ada opsi untuk memutakhirkan semua paket sekaligus (yaitu, tanpa mencantumkannya) dengan pendekatan ini?
Penggemar nomor satu Bjorks
1
@MikePalmice ya: pip-upgrade -p allakan memutakhirkan semua paket Anda dan memperbarui persyaratan file tanpa memerlukan input apa pun dari Anda.
Simion Agavriloaei
16

Jika Anda hanya ingin memutakhirkan satu paket spesifik yang dipanggil somepackage, perintah yang harus Anda gunakan dalam versi pip terbaru adalah

pip install --upgrade --upgrade-strategy only-if-needed somepackage

Ini sangat berguna ketika Anda mengembangkan aplikasi dalam Django yang saat ini hanya akan bekerja dengan versi spesifik Django (katakan Django = 1.9.x) dan ingin memutakhirkan beberapa paket dependen dengan fitur perbaikan bug / fitur baru dan paket yang ditingkatkan tergantung pada Django (tetapi bekerja dengan mengatakan versi Django setelah 1,5). Perilaku default pip install --upgrade django-some-packageadalah untuk meningkatkan Django ke versi terbaru yang tersedia yang dapat merusak aplikasi Anda, meskipun dengan --upgrade-strategy only-if-neededpaket dependen sekarang hanya akan ditingkatkan sesuai kebutuhan.

dr jimbob
sumber
4

Biasanya, pip akan membersihkan sendiri dan menghapus isi direktori build. Satu-satunya waktu tidak melakukan ini adalah jika:

  1. Anda menggunakan --no-installopsi
  2. Anda menggunakan paket yang dapat diedit
  3. Instalasi dibatalkan atau terganggu.

Dalam semua kasus lain, Anda seharusnya tidak memiliki builddirektori yang menyumbat lingkungan Anda.

Burhan Khalid
sumber
1

Menentukan versi spesifik untuk peningkatan membantu saya, bukan hanya perintah peningkatan.

pip3 install larapy-installer==0.4.01 -U
Bedram Tamang
sumber
0

yang memecahkan masalah bagi saya "pip install -I --upgrade psutil --force" setelah itu hanya menghapus instalan psutil dengan versi baru dan hop Anda tiba-tiba dapat menginstal versi yang lebih lama (:

Eran Hpac
sumber
0

Saya menggunakan ini:

pip3 install -r  requirements.txt  
Shahab Rahnama
sumber