Fabric: Pertimbangkan menabrak pin persyaratan Paramiko setelah Paramiko 2.0.x pasti stabil

Dibuat pada 30 Apr 2016  ·  19Komentar  ·  Sumber: fabric/fabric

  • Kami mengeluarkan 1.10.3 dan 1.11.1 dengan penyematan paramiko<2 eksplisit untuk mencegah lingkungan orang dari peningkatan / kerusakan yang tidak terduga, beberapa waktu lalu.
  • Paramiko 2.0 sekarang keluar tetapi masih segar, mungkin ada beberapa bug yang perlu diperbaiki.
  • Akan _nice_ untuk memungkinkan orang meningkatkan ke Paramiko 2.0 di bawah Fabric 1 jika mereka secara eksplisit menginginkannya - namun saya tidak melihat cara di setuptools/pip untuk melakukan ini

    • misalnya fungsi extras_require tidak mengizinkan Anda mengganti paket/versi yang sama seperti yang ditentukan dalam install_requires , jadi kami tidak dapat melakukan pip install fabric[paramiko-2] atau apa pun.

    • Semoga ada hal lain yang dapat kami lakukan yang saya lewatkan, seperti parameter CLI setup.py - tetapi itu juga bukan obat mujarab karena tidak berfungsi dengan roda atau metode instalasi non-sdist lainnya

    • Saya juga ingin menghindari keharusan membuat entri PyPI kedua yang mengerikan / setup.py seperti fabric-paramiko2 meskipun itu adalah opsi lain.

  • Mengingat Paramiko 2 adalah API yang kompatibel dengan Paramiko 1, kami _mungkin_ hanya ingin menambahkan pin versi ke paramiko<3 di rilis Fabric selanjutnya, sehingga orang-orang dapat terus mendapatkan perbaikan bug/keamanan/dll dari baris Paramiko 2.x

    • Jika kita melakukan ini, perlu menghapus panggilan Crypto.atfork di decorators.py (lihat #1460) dan pastikan tidak ada bagasi PyCrypto lainnya yang tersisa

    • Ini masih akan selalu memiliki kesempatan untuk memecahkan bagi orang-orang yang tidak bisa mendapatkan roda statis Cryptography.io all-in-one; mereka akan memutakhirkan Fabric dan kemudian akan meledak jika mereka kekurangan libffi-dev atau openssl-dev. Jadi akan sangat masuk akal untuk tidak pernah benar-benar membatalkan pin ini, alih-alih meminta orang menggunakan Fabric 2 setelah pin ini keluar.

Packaging Support

Komentar yang paling membantu

Grump, itu menjengkelkan - terima kasih atas beritanya, @hostep. (Tidak mencoba untuk menjadi snarky, tetapi - juga terkejut MacPorts masih digunakan, semua orang yang saya kenal beralih ke Homebrew bertahun-tahun yang lalu. Pengingat yang baik bahwa "top of mind" != "satu-satunya permainan di kota" kurasa :))

Saya mengeluarkan 1,12 kecil dengan iseng tadi malam (pengingat bagus lainnya untuk diri sendiri: berhenti menggunakan nomor versi literal ketika mendiskusikan peta jalan - katakan saja "rilis fitur yang akan datang" atau dll) dan tidak membuat perubahan ini, tetapi masih ingin melakukannya segera, jadi mungkin rilis kecil berikutnya sebagai gantinya.

Semua 19 komentar

Mungkin pertimbangkan keadaan perantara, di mana untuk satu atau dua rilis, fabric setup.py memungkinkan paramiko>=2 dan paramiko<2 , dan orang-orang akan mendapatkan cryptography secara default, tetapi dapat memaksa versi lama PyCrypto jika mereka membutuhkannya. Setelah dibakar sedikit, Anda dapat memindahkan setup.py untuk meminta paramiko>=2 .

Tidak yakin saya akan membuat Fabric 1.x membutuhkan paramiko>=2, berencana menyimpannya untuk Fabric 2.x. Tergantung pada penyerapan Fabric 2.x setelah keluar, saya kira.

Anda benar bahwa kembali ke melepas pin "Saya tidak peduli, paramiko 1 atau 2 tidak apa-apa" masih dapat dipecahkan dengan membiarkan orang menurunkan versi Paramiko mereka secara manual. pinning sebagian besar merupakan upaya untuk menghindari banjir laporan "onoz u break my build". Kami sudah mendapatkan beberapa, tapi tidak satu ton, apakah itu karena pin saya atau tidak adalah dugaan siapa pun.

@bitprophet FWIW, saya punya beberapa dataz! Selama 2 minggu terakhir (jadi ini termasuk beberapa hari sebelum paramiko 2.0 benar-benar dirilis), berikut adalah versi Paramiko yang paling banyak diunduh dari PyPI:

| Versi | Unduhan |
| --- | --- |
| 1.16.0 | 411903 |
| 2.0.0 | 308131 |
| 1.17.0 | 77360 |
| 1.15.2 | 47677 |
| 1.15.1 | 23893 |

Bagi saya jumlah pemasangan 2.0 yang sangat besar ini menunjukkan bahwa itu mungkin aman, jadi menghapus ikatan <2 tidak diperlukan, bagi kebanyakan orang itu akan berfungsi dengan baik (atau mudah diperbaiki), dan bagi mereka yang bisa 't hanya melakukan pip install paramiko<2 sebelum pip install fabric akan memperbaikinya.

Apakah mungkin setidaknya menggunakan penanda lingkungan untuk memberi tahu fabric agar menggunakan paramiko>2 untuk PyPy setidaknya, di mana status quo saat ini adalah bahwa fabric tidak akan dipasang?

@alex terlambat, maksud Anda "menghapus <2 terikat aman"? (bukannya "tidak perlu") :D

@Julian Saya berasumsi maksud Anda beberapa baris "ubah install_requires berdasarkan juru bahasa saat ini"? Tidak menentang begitu saja. (Meskipun peretasan IIRC seperti itu berhenti bekerja dengan roda, jadi kami mulai menghindarinya ...?)

Uhhh, ya, maksudku aman.

@bitprophet untuk roda Anda melakukan hal yang sama, hanya di extras_require dengan penanda lingkungan.

Pada dasarnya Anda menggosok perut @dstufft dan jin muncul.

(Contoh yang lebih serius: https://github.com/Julian/jsonschema/blob/master/setup.py#L25 tetapi Anda mengganti python_version dengan python_interpreter untuk mengirimkannya sebagai gantinya).

Saya akan mencoba memasukkannya ke dalam PR sehingga Anda dapat melihat tampilannya, kecuali jika Anda akan mewujudkannya?

Oh rapi, saya hanya samar-samar ingat belajar tentang hal itu beberapa waktu lalu. Jelas kemudian lupa. Saya benar-benar kecewa dengan melakukan itu jika itu akan membantu beberapa orang & tidak merugikan mayoritas. PR akan dihargai.

Re: masalah luar, saya pikir pada titik ini saya turun dengan menabrak pin ke <3 di Fabric 1.12+ (di samping pembersihan Crypto lain yang disebutkan sebelumnya, meskipun mereka harus menjadi persyaratan kecuali saya mau lakukan paramiko>=2,<3 , yang kurang saya sukai. Akan melihat betapa buruknya keadaan ketika saya menyodok ini dan mencoba memastikan cabang Fabric yang sama lulus tes di dua venv terpisah, satu dengan Crypto dan Paramiko 1, lainnya tanpa Crypto dan Paramiko 2)

Halo kawan-kawan

Tambahan kecil untuk diskusi ini:
Kami menggunakan Macports untuk menginstal port Fabric yang bergantung pada port Paramiko di workstation macOS kami.
Namun baru-baru ini Macports memutuskan untuk memutakhirkan Paramiko dari versi 1.16.0 ke 2.0.1 dan sekarang kami menjalankan Fabric, itu tidak lagi berfungsi:

➜ fab deploy
Traceback (most recent call last):
  File "/opt/local/bin/fab", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2927, in <module>
    <strong i="13">@_call_aside</strong>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2913, in _call_aside
    f(*args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2940, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 637, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 650, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 829, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'paramiko<2.0,>=1.10' distribution was not found and is required by Fabric

Saya menyiasatinya dengan menurunkan Paramiko ke versi 1.16.0 menggunakan Macports, yang agak rumit untuk dilakukan secara manual, tetapi akhirnya berhasil lagi.

Saya pikir ini adalah kesalahan dari Macports, mereka harus menunggu untuk meng-upgrade Paramiko di pohon mereka sampai Fabric kompatibel.

Tapi bagaimanapun, alangkah baiknya jika versi baru dari Fabric dapat dirilis dengan dukungan untuk Paramiko > 2.0 sehingga kita bisa mendapatkan semuanya untuk bekerja kembali menggunakan Macports dengan versi terbaru dari semua port.

Grump, itu menjengkelkan - terima kasih atas beritanya, @hostep. (Tidak mencoba untuk menjadi snarky, tetapi - juga terkejut MacPorts masih digunakan, semua orang yang saya kenal beralih ke Homebrew bertahun-tahun yang lalu. Pengingat yang baik bahwa "top of mind" != "satu-satunya permainan di kota" kurasa :))

Saya mengeluarkan 1,12 kecil dengan iseng tadi malam (pengingat bagus lainnya untuk diri sendiri: berhenti menggunakan nomor versi literal ketika mendiskusikan peta jalan - katakan saja "rilis fitur yang akan datang" atau dll) dan tidak membuat perubahan ini, tetapi masih ingin melakukannya segera, jadi mungkin rilis kecil berikutnya sebagai gantinya.

FWIW, kami (FreeBSD) mengalami masalah yang sama dan harus membuat port dan paket paramiko1 untuk py-fabric. Lihat juga:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213893
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214379

TLDR: Ketergantungan <= dan == sangat menyakitkan/mengganggu dan menciptakan lebih banyak masalah daripada yang seharusnya dipecahkan.

Ada jauh lebih sedikit rasa sakit bagi pengguna hilir dan pembuat paket/porter ketika hulu hanya secara proaktif menguji versi terbaru dari dependensi mereka (dalam pengembangan, sebelum rilis adalah waktu terbaik untuk melakukan ini) dan tidak meresepkan atau membatasi versi ketergantungan kecuali ada versi yang secara eksplisit merusak kompatibilitas.

Bahkan dalam kasus itu batasannya hanya sementara, dan hanya jika rilis dibuat saat rusak, dan hanya saat pembuat dependensi diberi tahu dan sampai perbaikan dilakukan.

Bonus dari metode ini adalah mengajarkan hulu (dan hulu dari hulu) bahwa keputusan yang mereka buat benar-benar memengaruhi pengguna mereka dalam praktik (bukan hanya secara teori), dan dengan pengetahuan ini, semoga meminimalkan kemungkinan itu terjadi lagi di masa depan.

Untuk menambahkan sedikit lebih banyak info tentang masalah Macports, tampaknya sudah diperbaiki karena mereka menambahkan tambalan saat menginstal yang mengubah persyaratan untuk Paramiko dari <2.0 menjadi <3.0
Kami sekarang menjalankan Fabric v1.12.0 & Paramiko v2.0.2 di workstation macOS kami dan tidak ada masalah dengan ini.

@hostep Terima kasih telah menyoroti itu

@hostep Memang ada kalanya saya mengganti spesifikasi *_requires (dari <= / == ke >= atau '' ) di FreeBSD port, jika rangkaian pengujian telah lulus dengan versi dependensi yang lebih baru. Namun ini bergantung pada pengujian yang luar biasa sehingga bisa berisiko, dan meskipun kami adalah hilir Fabric, kami juga tidak suka merusak lingkungan pengguna (hilir) kami :)

Lebih banyak pembaruan nomor ... ikhtisar 6 bulan terakhir:

screen shot 2016-12-05 at 6 27 27 pm

dan 2 minggu terakhir:

screen shot 2016-12-05 at 6 35 09 pm

Paramiko 2.0.x sekarang dengan mudah setengah dari semua unduhan. Dan saya ingin tahu berapa banyak dari 50% lainnya karena tiket ini tidak digabung :) akan segera diketahui!

Pikir saya akan mengeksekusi ini dan mengeluarkannya sebagai Fab 1.13.0.

Meninjau kembali apa yang extras_require tampaknya hanya diperlukan jika saya ingin membatasi perubahan ke PyPy; pada titik ini saya hanya melakukan "izinkan Paramiko <3" secara grosir ...

Ada PyPI

Gah, tentu saja saya lupa tiket saudara, # 1462! 1.13.1 dalam perjalanan...EDIT: dan, digabung/dirilis.

Hore!

Pada 9 Desember 2016 20:14, "Jeff Forcier" [email protected] menulis:

Gah, tentu saja saya lupa tiket saudara, # 1462
https://github.com/fabric/fabric/pull/1462 ! 1.13.1 dalam perjalanan...


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/fabric/fabric/issues/1461#issuecomment-266111875 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/AAUIXlbJBlS0po_zKgQsUp7-y7I7WgbTks5rGbajgaJpZM4ITeNm
.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

TimotheeJeannin picture TimotheeJeannin  ·  3Komentar

peteruhnak picture peteruhnak  ·  4Komentar

bitprophet picture bitprophet  ·  6Komentar

omzev picture omzev  ·  6Komentar

shadyabhi picture shadyabhi  ·  5Komentar