Situasi
Saya mencoba untuk port perpustakaan open-source ke Python 3. ( SymPy , kalau ada yang bertanya-tanya.)
Jadi, saya perlu menjalankan 2to3
secara otomatis ketika membangun untuk Python 3. Untuk melakukan itu, saya perlu menggunakan distribute
. Karena itu, saya perlu mem-port sistem saat ini, yang (menurut doctest) distutils
.
Masalah
Sayangnya, saya tidak yakin apa perbedaan antara modules- ini distutils
, distribute
, setuptools
. Dokumentasinya kurang lengkap, karena semuanya tampak seperti percabangan satu sama lain, dimaksudkan untuk kompatibel dalam sebagian besar keadaan (tetapi sebenarnya, tidak semua) ... dan seterusnya, dan seterusnya.
Pertanyaan
Bisakah seseorang menjelaskan perbedaannya? Apa yang harus saya gunakan? Apa solusi paling modern? (Sebagai tambahan, saya juga menghargai beberapa panduan tentang porting Distribute
, tapi itu sedikit di luar cakupan pertanyaan ...)
Jawaban:
Pada Maret 2020, sebagian besar jawaban lain untuk pertanyaan ini beberapa tahun kedaluwarsa. Ketika Anda menemukan saran tentang masalah pengemasan Python, ingatlah untuk melihat tanggal publikasi, dan jangan percayai informasi yang ketinggalan zaman.
The Python Panduan Kemasan Pengguna adalah layak dibaca. Setiap halaman memiliki tanggal "pembaruan terakhir" yang ditampilkan, sehingga Anda dapat memeriksa kebaruan manual, dan ini cukup komprehensif. Fakta bahwa itu di-host di subdomain python.org dari Python Software Foundation hanya menambah kepercayaan untuk itu. The Project Ringkasan Halaman ini terutama relevan di sini.
Ringkasan alat:
Berikut ringkasan lanskap kemasan Python:
Alat yang didukung:
distutils
masih merupakan alat standar untuk pengemasan dengan Python. Ini termasuk dalam pustaka standar (Python 2 dan Python 3). Ini berguna untuk distribusi Python sederhana, tetapi tidak memiliki fitur. Ini memperkenalkandistutils
paket Python yang dapat diimpor dalamsetup.py
skrip Anda .distutils
bagian dari Panduan Pengguna Paket Pythonsetuptools
dikembangkan untuk mengatasi keterbatasan Distutils, dan tidak termasuk dalam perpustakaan standar. Itu memperkenalkan utilitas baris perintah yang disebuteasy_install
. Ini juga memperkenalkansetuptools
paket Python yang dapat diimpor dalamsetup.py
skrip Anda , danpkg_resources
paket Python yang dapat diimpor dalam kode Anda untuk mencari file data yang diinstal dengan distribusi. Salah satu gotchas-nya adalah ia menambaldistutils
paket Python. Ini harus bekerja dengan baikpip
. Ia melihat rilis reguler.setuptools
bagian dari Panduan Pengguna Paket Pythonscikit-build
adalah generator sistem bangun yang ditingkatkan yang secara internal menggunakan CMake untuk membangun ekstensi Python yang dikompilasi. Karena scikit-build tidak didasarkan pada distutils, ia tidak benar-benar memiliki keterbatasan. Ketika ninja-build hadir, scikit-build dapat mengkompilasi proyek besar tiga kali lebih cepat daripada alternatifnya. Ini harus bekerja dengan baikpip
.scikit-build
bagian dari Panduan Pengguna Paket Pythondistlib
adalah perpustakaan yang menyediakan fungsionalitas yang digunakan oleh alat tingkat tinggi sepertipip
.distlib
bagian dari Panduan Pengguna Paket Pythonpackaging
juga merupakan perpustakaan yang menyediakan fungsionalitas yang digunakan oleh alat tingkat tinggi sepertipip
dansetuptools
packaging
bagian dari Panduan Pengguna Paket PythonAlat yang ditinggalkan / ditinggalkan:
distribute
adalah garpusetuptools
. Ini berbagi namespace yang sama, jadi jika Anda telah Mendistribusikan diinstal,import setuptools
sebenarnya akan mengimpor paket yang didistribusikan dengan Mendistribusikan Mendistribusikan digabung kembali ke Setuptools 0.7 , jadi Anda tidak perlu menggunakan Mendistribusikan lagi. Bahkan, versi pada Pypi hanyalah lapisan kompatibilitas yang menginstal Setuptools.distutils2
adalah upaya untuk mengambil yang terbaik daridistutils
,setuptools
dandistribute
dan menjadi alat standar yang termasuk dalam perpustakaan standar Python. Idenya adalah bahwadistutils2
akan didistribusikan untuk versi Python lama, dan itudistutils2
akan diubah namanya menjadipackaging
untuk Python 3.3, yang akan memasukkannya ke dalam perpustakaan standarnya. Namun, rencana ini tidak berjalan sebagaimana mestinya, dan saat ini,distutils2
merupakan proyek yang ditinggalkan . Rilis terbaru adalah pada bulan Maret 2012, dan beranda Pypi akhirnya diperbarui untuk mencerminkan kematiannya.Lainnya:
Ada alat lain, jika Anda tertarik, baca Ringkasan Proyek di Panduan Pengguna Kemasan Python. Aku tidak akan daftar mereka semua, untuk tidak mengulangi halaman tersebut, dan untuk menjaga jawaban yang cocok dengan pertanyaan, yang hanya sekitar
distribute
,distutils
,setuptools
dandistutils2
.Rekomendasi:
Jika semua ini baru bagi Anda, dan Anda tidak tahu harus mulai dari mana, saya akan merekomendasikan belajar
setuptools
, bersamapip
danvirtualenv
, yang semuanya bekerja dengan sangat baik bersama.Jika Anda melihat ke dalam
virtualenv
, Anda mungkin tertarik pada pertanyaan ini: Apa perbedaan antaravenv
,pyvenv
,pyenv
,virtualenv
,virtualenvwrapper
, dll? . (Ya, aku tahu, aku mengerang bersamamu.)sumber
'Distribute' is a now deprecated fork of the 'Setuptools' project.
@ PyPI Bagikan halaman.Saya seorang pengelola distutils dan kontributor distutils2 / packaging. Saya melakukan pembicaraan tentang kemasan Python di ConFoo 2011 dan hari ini saya menulis versi panjangnya. Ini belum diterbitkan, jadi di sini adalah kutipan yang seharusnya membantu mendefinisikan sesuatu.
Distutils adalah alat standar yang digunakan untuk pengemasan. Ini bekerja dengan baik untuk kebutuhan sederhana, tetapi terbatas dan tidak mudah untuk diperluas.
Setuptools adalah proyek yang lahir dari keinginan untuk mengisi fungsionalitas distutils yang hilang dan menjelajahi arah baru. Dalam beberapa subkomunitas, ini adalah standar de facto . Menggunakan monyet-patching dan sihir yang disukai oleh pengembang inti Python.
Distribute adalah fork dari Setuptools yang dimulai oleh pengembang merasa bahwa kecepatan pengembangannya terlalu lambat dan tidak mungkin untuk mengembangkannya. Perkembangannya sangat melambat ketika distutils2 dimulai oleh kelompok yang sama. Pembaruan 2013-Agustus: mendistribusikan digabung kembali ke setuptools dan dihentikan.
Distutils2 adalah perpustakaan distutils baru, dimulai sebagai garpu dari basis kode distutils, dengan ide-ide bagus diambil dari alat setup (yang beberapa di antaranya dibahas secara mendalam dalam PEPs), dan installer dasar yang terinspirasi oleh pip.
Nama sebenarnya yang Anda gunakan untuk mengimpor Distutils2 adaDistutils2 tidak membuat rilis Python 3.3, dan itu ditahan.packaging
di pustaka standar Python 3.3+, ataudistutils2
dalam 2.4+ dan 3.1-3.2. (Backport akan segera tersedia.)Info lebih lanjut:
Saya berharap untuk menyelesaikan panduan saya segera, itu akan berisi lebih banyak info tentang poin kuat dan lemah setiap perpustakaan dan panduan transisi.
sumber
share
tombol).distribute
baru saja digabungkan kembalisetuptools
. Fakta bahwa banyak informasi di luar sana ketinggalan jaman menambah kebingunganCATATAN: Jawaban sudah usang, Bagikan sekarang sudah usang. Jawaban ini tidak lagi berlaku sejak Otoritas Pengemasan Python dibentuk dan telah melakukan banyak pekerjaan untuk membersihkannya.
Ya, Anda mengerti. : -o Saya kira saat ini paket yang disukai adalah Distribute , yang merupakan garpu dari setuptools, yang merupakan perpanjangan dari distutils (sistem pengemasan asli). Setuptools tidak dipertahankan sehingga telah bercabang dan diganti namanya, namun ketika diinstal menggunakan nama paket setuptools! Saya pikir sebagian besar pengembang Python sekarang menggunakan Distribute, dan saya dapat mengatakan dengan pasti bahwa saya melakukannya.
sumber
Saya menyadari bahwa saya telah menjawab pertanyaan sekunder Anda tanpa menanggapi asumsi yang tidak dipertanyakan dalam masalah awal Anda:
Anda mungkin , tidak perlu . Strategi lain dijelaskan di http://docs.python.org/dev/howto/pyporting
Anda boleh :) distutils mendukung konversi kode 2to3 waktu-bangun (bukan dokumen), dengan cara berbeda yang mendistribusikan: http://docs.python.org/dev/howto/pyporting#during-installation
sumber
Memperbarui pertanyaan ini pada akhir 2014 di mana untungnya kekacauan pengemasan Python telah sangat dibersihkan oleh manajer paket " conda " Continuum .
Secara khusus, conda dengan cepat memungkinkan penciptaan " lingkungan " conda . Anda dapat mengonfigurasi lingkungan Anda dengan berbagai versi Python. Sebagai contoh:
conda create -n py34 python=3.4 anaconda
conda create -n py26 python=2.6 anaconda
akan membuat dua lingkungan Python ("py34" atau "py26") dengan versi Python yang berbeda.
Setelah itu Anda dapat memanggil lingkungan dengan versi khusus Python dengan:
source activate <env name>
Fitur ini tampaknya sangat berguna dalam kasus Anda di mana Anda harus berurusan dengan versi Python yang berbeda.
Selain itu, conda memiliki fitur berikut:
Poin terakhir itu sangat penting jika Anda berada di arena komputasi ilmiah.
sumber