Python-future: Impor "configparser" ajaib baru merusak backport "configparser"

Dibuat pada 16 Okt 2014  ·  13Komentar  ·  Sumber: PythonCharmers/python-future

Ada backport dari perubahan configparser di Python 3.x yang disebut "configparser". Dengan impor polyglot yang baru Anda perkenalkan, paket Anda mungkin menimpa backport, misalnya tidak mungkin menggunakan keduanya secara bersamaan.

Harap pertimbangkan untuk menambahkan backport configparser ke daftar persyaratan python-future, yang akan menyelesaikan masalah ini.

Komentar yang paling membantu

Seiring berjalannya waktu, semakin banyak orang yang langsung menggunakan backport configparser, karena itulah cara menggunakan upstream API (dan fitur) terbaru saat masih menggunakan Python 2.x.

Jadi saya tidak begitu mengerti relevansi tes Anda yang gagal. Jika Anda menginginkan API lama, Anda menggunakan nama modul lama. Jika Anda menginginkan API baru, Anda menggunakan nama baru. Tidak masuk akal lagi untuk menempatkan 2.x ConfigParser di tempat pengganti Python 3-nya.

Akan menyenangkan untuk memperbaiki ini karena saya mendapat laporan tentang ini di Kali https://bugs.kali.org/view.php?id=3245 dan dalam sistem Kali Linux yang khas saya memiliki paket yang membutuhkan kedua python -masa depan dan python-configparser. Kecuali bahwa yang terakhir rusak untuk siapa saja yang menggunakannya di Python 2.x karena bug ini.

Jadi kesimpulannya, saya pikir Anda harus menerapkan (1) dan membatalkan tes tentang configparser. (2) tidak boleh dilakukan karena paket Debian dibangun di lingkungan minimal dan python-configparser tidak akan tersedia saat setup.py dijalankan. (3) dimungkinkan tetapi itu berarti bahwa API python-future bervariasi tergantung pada cara pemasangannya. Ini benar-benar bukan ide yang baik karena distribusi hanya dapat menginstalnya dengan satu cara.

Terima kasih! cc @sbrun

Semua 13 komentar

Juga, pada repo backport orang sudah melaporkan ini tidak berfungsi: https://bitbucket.org/ambv/configparser/issue/8/configparser-import-broken-on-py27

Untuk saat ini saya harus menghapus ketergantungan pada python-future di configparser untuk membuatnya berfungsi.

+1

Secara umum, python-future tidak boleh menginstal modul yang membayangi modul lain yang diinstal IMO. Sebagian besar yang lain cenderung tidak menjadi masalah, jadi mungkin lebih baik melakukan itu daripada menambahkan ketergantungan palsu.

@ambv , @Julian : Terima kasih atas tanggapan Anda. Saya ingin memperbaiki ini tetapi saya belum melihat cara yang tepat untuk melanjutkan. Berikut adalah opsi yang saya lihat:

  1. Hapus configparser dari python-future dan ubah dokumen untuk merekomendasikan penggunaan paket configparser Anda sebagai gantinya. Ini mungkin masuk akal, tetapi tidak kecuali configparser adalah pengganti drop-in untuk ConfigParser pada Py2.7. Saat ini, ada 14 kegagalan dan 9 kesalahan saat menjalankan test_cfgparser.py pada Python 2.7.9 dengan paket configparser diinstal setelah mengganti import ConfigParser dengan import configparser as ConfigParser . Dengan python-future dan alias configparser sederhana yang diinstal, semua tes yang sama lulus.
  2. Ubah setup.py di python-future untuk menginstal paket alias configparser hanya jika modul atau paket dengan nama yang sama tidak ada. Kelemahannya adalah bahwa paket yang diinstal akan bergantung pada urutan daftarnya di requirements.txt . Lebih buruk lagi, saya percaya pip tidak menjamin untuk menginstal paket dalam urutan yang muncul di requirements.txt . Jika configparser dan future keduanya terdaftar, ini akan menyebabkan kumpulan paket yang diinstal oleh pip menjadi non-deterministik.
  3. Gunakan fitur extras dari setuptools untuk mendukung opsi pemasangan seperti pip install future[without_configparser] .

Apakah menurut Anda paket configparser dapat dimodifikasi sehingga test suite Python 2.7.9 lolos saat menggunakannya? Ini akan memberi saya kepercayaan diri dalam merekomendasikannya untuk jalur peningkatan yang lancar untuk kode Py2 yang saat ini menggunakan ConfigParser .

Seiring berjalannya waktu, semakin banyak orang yang langsung menggunakan backport configparser, karena itulah cara menggunakan upstream API (dan fitur) terbaru saat masih menggunakan Python 2.x.

Jadi saya tidak begitu mengerti relevansi tes Anda yang gagal. Jika Anda menginginkan API lama, Anda menggunakan nama modul lama. Jika Anda menginginkan API baru, Anda menggunakan nama baru. Tidak masuk akal lagi untuk menempatkan 2.x ConfigParser di tempat pengganti Python 3-nya.

Akan menyenangkan untuk memperbaiki ini karena saya mendapat laporan tentang ini di Kali https://bugs.kali.org/view.php?id=3245 dan dalam sistem Kali Linux yang khas saya memiliki paket yang membutuhkan kedua python -masa depan dan python-configparser. Kecuali bahwa yang terakhir rusak untuk siapa saja yang menggunakannya di Python 2.x karena bug ini.

Jadi kesimpulannya, saya pikir Anda harus menerapkan (1) dan membatalkan tes tentang configparser. (2) tidak boleh dilakukan karena paket Debian dibangun di lingkungan minimal dan python-configparser tidak akan tersedia saat setup.py dijalankan. (3) dimungkinkan tetapi itu berarti bahwa API python-future bervariasi tergantung pada cara pemasangannya. Ini benar-benar bukan ide yang baik karena distribusi hanya dapat menginstalnya dengan satu cara.

Terima kasih! cc @sbrun

Saat ini, misalnya, Fedora hanya menambal configparser karena mereka juga menyediakan backport.

FWIW, saat ini saya sedang melalui perbaikan hulu yang perlu saya gabungkan ke backport dan akan merilis configparser backport 3.5.1 besok. Adapun python-future, saya juga berpikir itu harus diimplementasikan (1).

Terima kasih semuanya atas masukannya!

Saya bersedia menghapus configparser dari python-future di v0.16. Saya memiliki cabang yang sedang dalam proses: https://github.com/PythonCharmers/python-future/tree/v0.16.x.

Saya datang ke sini mencoba mencari tahu mengapa ConfigParser.read_dict berhenti bekerja di mesin saya.

Ternyata salah satu paket yang saya gunakan mulai bergantung pada python-future (khususnya beberapa bagian dari QGIS), dan kemudian saya terkena masalah ini karena versi ConfigParser di Python 2.7 tidak mengimplementasikan API lengkap ConfigParser di Python 3.x.

Saya menyelesaikan ini dengan mengunci versi paket python-future :

sudo chmod 000 /usr/lib/python2.7/dist-packages/configparser/

Flake8 baru-baru ini menambahkan ketergantungan pada backport configparser yang dipelihara dengan murah hati oleh @ambv. Beberapa pengguna juga menginstal modul ini yang merusak perilaku Flake8 yang ada, diuji, dan didokumentasikan. Ini adalah masalah bagi kami, dan sekarang saya akan mulai menambahkan dokumentasi ke Flake8 untuk menjelaskan mengapa orang mungkin melihat masalah. Masa depan akan disebutkan secara khusus untuk membantu pengguna menghindari kerumitan ini.

@sigmavirus24 Ian, Anda dapat mengatasinya untuk saat ini dengan bergantung pada backport configparser dan menggunakan formulir from backports import configparser . Ini secara khusus diterapkan untuk membuka blokir situasi seperti ini :(

@ambv terima kasih! Saya tidak menyadari bahwa saya bisa melakukan itu.

Saya sekarang telah merilis v0.16.0, yang menghapus configparser . Dokumen juga merekomendasikan penggunaan backport Lukasz. Terima kasih atas tanggapan Anda, semuanya!

Terima kasih @edschofield!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat